c語言中char a和chara有什麼區別

2021-04-20 14:50:38 字數 5824 閱讀 4305

1樓:匿名使用者

char *a表示的是陣列a是一個指向char的指標型別陣列,相當於a裡面的每一個元素都實際值都是一個指向字串的指標(即儲存某個字串的首地址)

後面這個你應該要問的是char (*a)吧,不然的話就和第一個一樣了

char (*a) [n]表示的是指向一個元素為n的字串陣列的指標,說白了就是一個陣列指標(指向陣列的指標)。這個和函式指標有點像 int (*p) (int,int),表示指向返回值為int,並且含有2個int變數的函式

2樓:凌亂心扉

兩者區別如下:

一、」讀「」寫「能力

char*a="abcd";此時"abcd"存放在常量區。通過指標只可以訪問字串常量,而不可以改變它。

而char a[30]="abcd";此時"abcd"存放在棧。可以通過指標去訪問和修改陣列內容。

二、賦值時刻

char*a="abcd";是在編譯時就確定了(因為為常量)。

char a[30]="abcd";是在執行時確定

三、指向地址所儲存的值不同。

對於char**p1,*p1的型別為char*型,而**p1的型別才是char型。

對於char*類指標p2,*p2就是char型。

char*a="abcd";存於靜態儲存區。在棧上的陣列比指標所指向字串快。慢

char a[30]="abcd";存於棧上。快。

四、記憶體分配方式

記憶體分配有三種:堆區和棧區、靜態儲存區。功能不同;使用方式也不同。

1、棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

2、堆:就是那些由new或malloc分配的記憶體塊,在不適用時,要手動用delete或free來釋放記憶體區域。

3、靜態儲存區:記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。它主要存放靜態資料、全域性資料和常量。

但是,良好的程式設計習慣是:如果某動態記憶體不再使用,需要將其釋放掉,並立即將指標置位null,防止產生野指標。

3樓:匿名使用者

char *a是錯誤的,只能定義char *a[任意整數];

或者char *a[4或者其他整數或者不填]=「abc」;

或者char *a[3或者其他整數或者不填]=;

或者char *a[2或者其他整數或者不填]=;

或者char k,j,l,*a[3]=;

char (*)a也是錯誤的,只能定義為(char *)a[任意整數];

首先說下第一個,以char *a[4];為例, 這語句是定義一個指標型陣列,他的元素都是指標。指標是可以直接來指向一個字串的,用法是char *p="good。指標型陣列中每個元素都是指標,則每個元素都可以去定義一個字串或者是定義一個變數;所以如果有一個a[4][4]=; 現在就可以用char *p[4]=; 這樣的好處是節約了空間,一個陣列被定義下來後,記憶體就被分配了,如果這個陣列在後面的語句中不再使用了,那它就佔著空間,使得原始檔很大,如果使用指標陣列,就很容易解決這個問題了,因為只要讓指標陣列在指向其他的字串或者其他的一些變數 ,這樣原來的空間就被釋放了

(char *)a[4]的意思是將指標型陣列a中的元素a[4]強行轉化為char型別

4樓:狂盜一枝梅

char *a一般用於函式中形參的宣告,特別只用於一維陣列;char(*)a不明白什麼意思,難不成是將a陣列強制轉換成字元型???只是猜測,不要多想呵。

5樓:楊武威

char *a[ ]相當於char** a,是指標的指標;

char (*)a[ ] 是char型別指標陣列;

(純屬個人理解,僅供參考)

6樓:小小的

含義是一樣的。其實陣列也是指標。都是宣告瞭a這個char*型別陣列。雖然有語法錯誤,但是意思是那樣的。

7樓:匿名使用者

char* a:a首先是個陣列,陣列中的每個元素是char*型別的,也就是每個元素是一個指向char型別的指標,至於char(*)a,圓括號一般是用作強制型別轉換的,這種寫法沒有見過,編譯器應該分析不出這個語法,會報錯

8樓:快來見本大人

char *a[ ] 表示一個陣列a,陣列裡的元素型別是char *

char (*)a[ ] 表示一個指標變數a,指向的變數型別是 char 的陣列

char *a和char* a有什麼區別?

9樓:淋漓盡致的

沒有什麼不同,都是定義一個指向char型的指標但是要注意的是如果你想在一句話裡面2個指標,那麼正確的做法應該是char *a,*b;而不是char* a,b;

後面那個b只是一個char型變數

所以一般提倡使用第一種,避免糊塗搞錯,當然如果你僅僅在一句話裡面定義一個變數或者是在定義形參的話,那麼第二種看上去更直接一點

c語言,char a;和char a[1];有什麼區別

10樓:匿名使用者

char a 表示 定義了一個變數,名叫a, 它是字元型別(佔用記憶體的一個位元組)

char a[1] 表示 定義了一個陣列,名叫a, 它是一個包含一個字元型別資料的陣列,這個陣列只能存放1個字元型別的資料。

兩者在不接觸指標做函式引數的程式的時候功能是一樣的。

11樓:萢萢

char a是字元,char a[1]是字元陣列。

c++ 語言中char a="a"; 和char a='a' 有什麼區別

12樓:匿名使用者

char a='a' 是合法的

char a="a' 是不合法的

char型不能為字串,只能為字元

13樓:匿名使用者

「a」表示字串,字串長度等於內容加『\0』的長度,所以是佔用兩個位元組記憶體。『a』表示字元,佔用一個位元組記憶體。而一個字元變數長度永遠為1位元組,所以前者寫法錯誤,應該寫成 char *a = "a"。

14樓:匿名使用者

前面是錯的。「a」為const char *, 「a」= 『a'+ '\0'。

在c語言中char a[]={'a','b','c'}和char a[]="abc"有什麼區別 它們各在記憶體裡佔多少和位元組

15樓:匿名使用者

char a= 這是一個字元陣列,佔3個位元組。 char a="abc" 則不同,它是一個字串,最後還有一個'\0'結束符,佔4個位元組

c語言中char**是什麼意思? 和char*有什麼區別呀

16樓:凌亂心扉

意思:char ** 指向字元型指標的指標;

區別:char *字元型指標,指向一個字元;

資料在記憶體中的儲存區域

1、棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

2、堆:就是那些由new或malloc分配的記憶體塊,在不適用時,要手動用delete或free來釋放記憶體區域。

3、全域性/靜態儲存區:全域性變數和靜態變數被分配到同一塊記憶體中,他們共同佔用同一塊記憶體區。

4、常量儲存區:這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改

char**最常使用在main函式中:

int main(int argc,char**argv);

等同於int main(int argc,char*argv)

等同於int main(int argc,string argv)(c語言中並不直接包含字串型別,此處便於理解,所以使用string型別)

char是字元變數的說明符

字元變數的取值是字元常量,即單個字元。字元變數的型別說明符是char。字元變數型別說明的格式和書寫規則都與整型變數相同。

17樓:花潯方小憂

指標是一種型別。比如 char* a。一般人寫法是把*和a寫一起,即char *a。

從型別定義上應該是第一種(雖然語法和效果上二者沒區別)。char* a的意思是,a變數是一個指標,char型指標,裡面存的char的地址。。同理 char**a的正確理解的寫法是(char*)* a,即a變數是一個指標,是一個char*型的指標。

即裡面存的的char*的地址。再說直白點就是(char) *,char是一種型別,(char*)*,括號裡面的char*也是一種型別,和int,char平級別的型別。char* a。

使用*a取得a的值。同理char** a,**a取得的也是值,該值是個地址,該地址指向a實際的值。簡單例子就是我給你個紙條,上面寫著我的地址,(相當於char* a)。

然後我又給你個紙條,上面寫著上一個紙條的地址。

18樓:匿名使用者

char**是二重指標,也就是指向指標變數的指標。 而char*是一維指標,即指向字元變數的指標。

其區別在於,指向地址所儲存的值不同。

對於char **p1, *p1的型別為char*型,而**p1的型別才是char型。

對於char*類指標p2,*p2就是char 型。

19樓:阿冬

設char a;

char*p=&a;表示p是一個指標變數,裡面儲存的是一個地址,該地址是字元型別變數a所在的位置。

char**pp=&p;表示pp是一個指標變數,裡面儲存的是一個地址,該地址是指標變數p所在的位置。

20樓:匿名使用者

char*是指標,可以用來表示一維陣列,

char**是指標的指標。這個可以用來表示二維的陣列

21樓:

char** 是二維字元指標,而char*是一維字元指標,跟int**和int*的區分一樣。謝謝

22樓:匿名使用者

char**是指標的指標型別,char*是指標型別

23樓:楓璽

c語言中,char* 表示字元指標型別,當其指向一個字串的第一個元素時,它就可以表示這個字串。

如char* str="learn c";中,"learn c"是長度為8的字元陣列常量,其最後一個元素是'\0',而這句代表執行的結果是將str指向了"learn c"的第一個字元'l',str後面的連續記憶體依次存放'e','a','r','n',' ','c','\0'

擴充套件資料

定義char*注意事項:

1、在程式宣告變數的時候的*,只是表明「它是一個無符號整數,這個整數指向某個記憶體地址,一次訪問sizeof(type)長度」,不要和(*)操作符混淆。

2、能將二維陣列的陣列名賦給指標陣列的陣列名,pai=arr(錯),因為兩者的型別不一致,二維陣列名的型別是指向int型的指標,而指標陣列的的陣列名是指向int *型別的指標。

24樓:匿名使用者

char *s1="hello";

char *s2[2]=;

printf(s1); //helloprintf(s2[0]); //hello

c語言char a='h';a-'a'+'a'得什麼

25樓:海盜青

答案是h 其實就是大小寫轉化

也可以這麼看

h對應的ascii碼十進位制為72 a為65 a為97a-'a'+'a'也就是'h'-'a'+'a'=72-65+97=104

h對應的ascii碼十進位制就是104

C語言中,char ahappy與char ahappy 與char ahappy

1,表示定義一 個含有五個元素的 果回a strlen a 5 與 答c區別不大 自己理解吧 c語言char a h a a a 得什麼 答案是h 其實就是大小寫轉化 也可以這麼看 h對應的ascii碼十進位制為72 a為65 a為97a a a 也就是 h a a 72 65 97 104 h對應...

char a在c 中應該怎麼表示

因為像 等等字元在程式中有特別的用途,所以為了正常使用它,就需要複雜一點的表示了,此時c中用 來引起一個表示式就是了。後邊的表示式有幾種,一種就是引起 等然後就是引起一個8進位制表示式如 054,其中0必須有,表示8進位制或者一個十六進位制的表示式 x9f,其中x表示十六進位制,同樣不可省略這種情況...

我想知道傳說之下frisk和chara的關係

我總覺得福就是猹,原因如下 倆人長相極為相似,除了膚色和表情 倆人的性別都是模糊的 無性別的 倆人靈魂特質都為紅色 pe後調查紅色靈魂的棺材底部,會出現底下有繃帶的對話,而福的初始裝備就是繃帶 在遊戲裡的回憶中,總是出現猹的回憶,如果他們真的是倆個人的話,為什麼福回憶關於猹自己的回憶,而不是ta自己...