C語言,char aabc ,c語言中 char a a ,abc 是什麼意思?

2021-03-11 05:00:05 字數 6135 閱讀 8429

1樓:匿名使用者

等價於char a[4]="abc"。

還有復個自動加上的字元制串結束符。

這是陣列初始化自然會分配記憶體,因為在初始化時使用了""引號,所以會自動加上\0。

一個char是8個位,也就是一個位元組,所以須要在棧上開闢四個字元的大小空間。

有一種情況例外

char *const p = "abc";

該 字串被分配到字元常量區。返回一個指標交給p。並不會開新的棧上空間。

只所以要加const是因為他指向的是靜態常量不能修改。當然你可以改這個p指向的地址

2樓:匿名使用者

像這樣的問題bai最好自己du測試一下,

下面是zhic、c++測試dao,, 如果自己不動專手,學不到東西的屬

#include

#include

using namespace std;

char ss="abc";

int main()

結果 4313088 abc

3樓:匿名使用者

1. 會,系統在初始化時就為字串"abc「分配了記憶體

2. 這個」abc"的地址就是陣列a的首地址

c語言中 char a='a',abc; 是什麼意思?

4樓:匿名使用者

定義了兩個char型別的變數: a和abc

其中變數a在定義的時候順便給它賦了初始值: 'a' (字元a)

5樓:郗斌丙翠柏

chara=

"abc";

中a是陣列名,編譯時為其分配4個char單元,前3個單元用「abc"中的字元對應初始化,最後一個存放'\0';char*p=

"cdef";在編譯時先生成"cdef"字串常量,存放在常量區,並將首地址(c的地址)賦給char

*型指標變數p。從以上可見,a是陣列,所以其中的元素abc都可變,可以重寫;而p指向的是常量,不可更改。

c語言中,char a[] = "abc"; char *p = "cdef";

6樓:

char a = "abc"; 中a是陣列抄名,編譯時為其分配

襲4個char單元,前3個單元用「abc"中的字元對應初始化,最後一個存放'\0';char *p = "cdef";在編譯時先生成"cdef"字串常量,存放在常量區,並將首地址(c的地址)賦給char *型指標變數p。從以上可見,a是陣列,所以其中的元素abc都可變,可以重寫;而p指向的是常量,不可更改。

7樓:

區別就在於,陣列名a和指標變數p雖然本質上都是地址,但是陣列名a它的地址是不變的

內,即它是一個常指標,容指向是固定不變的;但是指標p是個指標變數,它的指向是可以改變的,你可以將a的地址賦值給p,即p=a;那麼指標p就指向了陣列a的首元素地址了,但是陣列名a它在賦值語句中是不能做左值的,因為它是一個常指標,和一個常量沒什麼區別。

8樓:匿名使用者

a定義是一個字串

陣列,*p定義的是一個字串常量。陣列名a是一個常量,指標p是一個變專量,屬當用作指標時,都能使用a+1,p+1,但是p++正確,a++錯誤,

通過a能改變陣列裡的元素的內容,但是不能通過p來改變它指向的字串,因為常量是不能更改的。a[2]=d正確,p[2]=d錯誤

9樓:匿名使用者

sizeof(a)=4 sizeof(p)=4 這裡不一樣

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

10樓:匿名使用者

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

c語言中char *a[ ]什麼意思,他和char (*)a[ ]有什麼什麼區別?

11樓:匿名使用者

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

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

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

12樓:凌亂心扉

兩者區別如下:

一、」讀「」寫「能力

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,防止產生野指標。

13樓:匿名使用者

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型別

14樓:狂盜一枝梅

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

15樓:楊武威

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

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

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

16樓:小小的

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

17樓:匿名使用者

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

18樓:快來見本大人

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

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

c語言:char * =」abcdef」; char a[]=」abcdef」; 編譯之前的區別

19樓:匿名使用者

char * a = "abcdef";

表示的是:a是一

個字串指標,指向的是一個字串常量"abcdef",所以如果用*a =『x』這樣的重新賦值是不允許的(也就是修改字串常量"abcdef"是不允許的)。用a=這樣的賦值是可以的,也就是a指向了另外的地址。

char a = "abcdef";

表示的是:a是一個字元型陣列,並且初始化的數值是共有7個元素,那麼當然可以修改陣列中的數值。

20樓:匿名使用者

編譯之前的區別就是指標定義錯了吧 *後邊得有識別符號 別的區別就是一個是指標型別 一個字元型別

char *a;a="abc"與char*a;*a="abc"char *a="abc"有什麼區別嗎?

21樓:

1,char*a;*a="abc" 是錯誤的, *a是字元,不是字串。

2,另外兩句完全一樣。雖然編譯能通過,但是你這句本身就是錯誤的:字串定義應該是 const char *a = "abc"; 因為字串儲存在不可讀記憶體中,所以c語言中字串的的返回值是 const char*.

3, 如果要得到能讀寫的字串請使用字元陣列: char a = "abc"

22樓:

char *a;

a = "abc";

和char *a;

*a = "abc";

作用相同 就是將字串陣列的首地址給char 指標變數a(假設16位地址值,要被截斷成8位

char *a =「abc」 可以看作是 char a="abc";

23樓:太叔青芬俞環

不行p1沒有初始化(也就是常說的野指標),它指向的空間是未知的先初始化:

p1=char(**)malloc(10*sizeof(char*));

//分配10個char*的空間

p1[0]=(char*)malloc(sizeof(a));

//給p1[0]分配合適空間

strcpy(p1[0],p)

//現在可以了

c語言裡的 char *s={"abc"} 是什麼意思??打什麼求解啊!!**等……

24樓:

通常寫du作:

char s=;

宣告一個字元zhi陣列daos,並初始化,在其中存入回字串"abc"

而char *s=;

則是理解答為: 宣告一個字元指標s, 讓它指向一個字串"abc", 這個字串在源程式所在的記憶體裡

25樓:匿名使用者

應該是取得字串首地址,然後除以10的餘數,也就是字串所在位置與10的同餘

26樓:匿名使用者

我覺得s是被定義的字元 abc是字元的長度

27樓:匿名使用者

用字元指標指向一個字串。

把a的地址賦給s

28樓:像山上的夜月

char *s= 即定義copy字元指標s 指向字串「abc」的首地址 即指向'a' ;

*s%10 指標s指向的地址 (因為前面的"%d"所以取整形值 即ascll碼)即'a'的ascll(97) 對10取餘 得7;

然後s++ 指向'b' ascll碼98%10=8;s++ 指向'c' 99%10=9 ;

s++,指向"\0"(字串尾結束標誌) 結束迴圈 輸出 789

C語言中headnode是什麼,C語言中,頭指標head,和headnext分別是什麼

應該是個變數名,直譯過來是頭指標,一般用在連結串列裡 c語言。如圖。星號 跟在node後面和在head前面有什麼區別?這兩種寫法效果是一樣的,沒有區別 如同 定義一個指標變數,可以寫 int p int p int p 沒區別 都是代表結構體指標 c語言中,頭指標head,和head next分別是...

c語言中while的用法C語言中while的用法

c語言中while的用法解析如下 一 1表示true,在bool型別取值false和true,0為false,非0為true 例如 1和2都是true 程式中,這裡1就表示永真,直到迴圈體內遇到break。二 while用法演示解析 1 含義 while 迴圈會在指定條件為真時迴圈執行 塊。2 語法...

c語言中while的用法,C語言中while的用法

當n 1時執行while迴圈結構裡的語句,當n不等於1時,則跳過該迴圈執行迴圈體外的語句。while 迴圈的格式 while 表示式 while 迴圈的執行順序 當表示式為真,則執行下面的語句,語句執行完之後再判斷表示式是否為真,如果為真,再次執行下面的語句,然後再判斷表示式是否為真 就這樣一直迴圈...