char a和char a有什麼區別?例如我用char a33就沒問題但是char a33就報錯了

2021-03-27 19:02:09 字數 5462 閱讀 6702

1樓:金色潛鳥

宣告 char a; 宣告 a 是 char 型變數,char 型變數 是 1 位元組 整型。

宣告 char *a; 宣告 a 是 指標,用於 指向 char 型變數, 指標用於存放指向的變數的地址。

宣告 char *a = 「abc」是宣告和初始化,這裡用字串常量做初始化,這是允許的。

宣告 char *a = 33 是錯誤的,因為 33 是整型常量,不是字串。

語句 printf(「%s」,*a) 是錯誤的, 同樣的外形 *a, 在宣告中的意思 和 在 語句 裡的意思不同(這是c/c++自己的規則-- 形式邏輯不成立),要輸出 字串 要用 printf(「%s」,a)。

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

2樓:匿名使用者

沒有什麼不同,都

是定義一個指向char型的指標

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

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

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

希望對你有幫助

3樓:匿名使用者

作用是一樣的,區別是風格問題。寫**多的人都有自己的風格,特別是大公司,要求風格統一,所以我們看到一段**風格與其他的不同時可以斷定,這段是copy的

4樓:匿名使用者

沒有區別,完全一樣。

5樓:冰戟玉語

c語言裡有char* a這種格式啊,沒見過,我只知道char *a表示定義了一個字元陣列。

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

6樓:匿名使用者

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

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

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

希望對你有幫助

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

7樓:

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

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

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

8樓:

char *a;

a = "abc";

和char *a;

*a = "abc";

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

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

9樓:太叔青芬俞環

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

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

//分配10個char*的空間

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

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

strcpy(p1[0],p)

//現在可以了

char *a[n] 和char (*a)[n]有什麼區別?

10樓:哇哎西西

一、」讀「」寫「能力

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";存於棧上,快。

11樓:匿名使用者

由於[ ]比*優先順序要高,因此a先與[n]結合,形成a[n]形式,這顯然是陣列形式,它有n個元素。然後和*結合,*表示此陣列時指標型別的,每個陣列元素都指向一個char型的變數。

*a[n] (*a)是一個指標有n個元素,每個元素為char型。也就是a指向的物件是有4個char元素的陣列,即a是指向一維陣列的指標。因記住,此時a只能指向一個包含n個元素的一維陣列,a的值就是一維陣列的起始地址

12樓:匿名使用者

兩者的區別是char *a定義了一個指標數字,即a的每個元素都是字元陣列,也就是a是個二維陣列;而char(*a)定義的是指向*[n]的指標,也就是指向二位字元陣列的指標。

char *a,b;和char* a,b有什麼區別?

13樓:匿名使用者

完全沒區別

都是a是char *型別,b是char型別的。

不用管*離誰近,只生效一次。

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

14樓:匿名使用者

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

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

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

15樓:凌亂心扉

兩者區別如下:

一、」讀「」寫「能力

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

16樓:匿名使用者

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

17樓:狂盜一枝梅

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

18樓:楊武威

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

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

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

19樓:小小的

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

20樓:匿名使用者

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

21樓:快來見本大人

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

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

c語言char a[4]="1as"和char * a ="1as"有什麼區別?

22樓:聽不清啊

前者是一個字元陣列,其中的字元是允許修改的;而後者的字串是儲存在常量區的,只允許讀取,不允許修改的。

23樓:凌雷雨

對於這個問題,很好回答!首先前面的a是一個char陣列,長度為4;而後面的a是一個char指標,指向一個地址!不論它們的長度,本身和作用都有著區別!謝謝,望採納

CtrlN和CtrlShiftN有什麼區別

ctrl n是開啟新的瀏覽器視窗,訪問其他 有記錄 ctrl shift n是開啟新的匿名瀏覽器視窗,訪問其他 沒有歷史記錄 ps裡shift ctrl n跟ctrl n有什麼區別 在psctrl n 新建文件,也就是新建了一個畫布,拖入 可進行操作 而shift ctrl n則是新建圖層。ctrl...

noone,none和nobody有什麼區別

nobody,no one,nothing只能單bai獨使用,後面不du跟of短語。他們當中 zhi沒有人會講日語。誤 daonobody of them can speak japanese.正 nobody can speak japanese.正 none of them can speak ...

american和america有什麼區別

兩者區別在american 多用其形copy容bai詞的意思 美國的 美洲du的 america 只有名詞的意思zhi 美國dao 美洲 american n.美國人,美洲人 美國英語 adj.美國的,美洲的 地道美國式的 america m r k n.美國 美洲 包括北美和南美洲 america...