C語言中char*和char[]用法區(qū)別分析
本文實例分析了C語言中char* 和 char []的區(qū)別。分享給大家供大家參考之用。具體分析如下:
一般來說,很多人會覺得這兩個定義效果一樣,其實差別很大。以下是個人的一些看法,有不正確的地方望指正。
本質(zhì)上來說,char *s定義了一個char型的指針,它只知道所指向的內(nèi)存單元,并不知道這個內(nèi)存單元有多大,所以:
當(dāng)char *s = "hello";后,不能使用s[0]='a';語句進(jìn)行賦值。這是將提示內(nèi)存不能為"written"。
當(dāng)用char s[]="hello";后,完全可以使用s[0]='a';進(jìn)行賦值,這是常規(guī)的數(shù)組操作。
若定義:
char s[] = "hello"; char *p = s;
也可以使用p[0] = 'a';因為這是p ==s,都是指向數(shù)組的指針。
下面看另外一種定義:
char *s = (char *)malloc(n(chabaoo.cn));//其中n為要開辟空間的大小
這句話其實相當(dāng)于:
char s[n];
定義的也是一個指向數(shù)組的指針,便可進(jìn)行數(shù)組的下標(biāo)操作
例子
#include <stdio.h> int main(int argc, char* argv[]) { char* buf1 = "this is a test"; char buf2[] = "this is a test"; printf("size of buf1: %d\n", sizeof(buf1)); printf("size of buf2: %d\n", sizeof(buf2)); return 0; }
結(jié)果是:
$ > ./main
size of buf1: 4
size of buf2: 15
相信本文所述對大家C語言程序設(shè)計的學(xué)習(xí)有一定的借鑒價值。
相關(guān)文章
C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼
這篇文章主要介紹了C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼,本文給大家分享問題解析及解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05C++實現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出
本文給大家介紹的是一則使用C++實現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出的代碼,實現(xiàn)起來其實非常簡單,C++本身就提供了二進(jìn)制類庫的,大家看代碼吧,簡單又實用。2015-03-03C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08