C語言裡charp char a 2abcdefp和p有什麼不同

2021-09-03 07:05:00 字數 5638 閱讀 9351

1樓:匿名使用者

*p表示指標,即有一個儲存單位p用於儲存一個資料(如字元)的地址。

**p表示指示指標的指標,即這個儲存單位p儲存了一個 指示另一個資料地址的指標 的地址。

2樓:匿名使用者

指標是什麼:我們可以理解為一個無符號雙字整型,即4個位元組的整數。大約能表示4096m個數,我計算機記憶體一般為2g,即2048m,所以4位元組數字基本可以標示出所有記憶體地址。

假設char *p='a'; 其中指標p的值為138. 意思是在記憶體位置138,有一個char字元a,即a儲存在第138個位元組中。此時指標p是4個位元組,也儲存在計算機的某個位置,假設為100,即在100到103這四個位元組中,儲存著指標p.

我們再定義一個指向指標的指標,比如char **s=p; 此時s的值就代表指標p的儲存位置,即100.

所以*s==100,*s==p; **s='a'; p==138; *p=='a';

一句話,指標就是地址值,簡單點,比如在大學校門口,有個指示牌,通過個這個指示牌,我們可以知道圖書館的位置,而在圖書館,也有個指示牌,通過這個指示牌,我們可以知道教學樓的位置。此時校門口的指示牌就相當於指向指標的指標**p,而圖書館的指示排相當於指標*p,教學樓就是最終目的地。

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

3樓:

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

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

4樓:

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

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

5樓:匿名使用者

a定義是一個字串

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

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

6樓:匿名使用者

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

c語言:char*a;char*p=a;什麼意思?

7樓:zz迎風

char *a是定義一個char型指標變數a,後面緊接著char *p=a,是定義一個char型指標變數p,並且p和a指向同一個位置。指標裡好像有一個說法是什麼:定義、關聯、引用,三者有順序

8樓:李旭展

字型常量,帶星號的話a直接定義為字型常量。帶星號的p為指標變數,a也定義成字型常量

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

9樓:匿名使用者

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

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

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

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

四、記憶體分配方式

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

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

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

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

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

11樓:匿名使用者

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

12樓:狂盜一枝梅

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

13樓:楊武威

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

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

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

14樓:小小的

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

15樓:匿名使用者

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

16樓:快來見本大人

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

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

c語言,如果定義char * *p,那麼*p和p分別代表什麼意思呢?

17樓:匿名使用者

除錯bai下面語句看結果du

char c='a';

char *pc=&c;

char **ppc=&pc;

printf("%d,%d,%d,%d,%d\n",c,pc,ppc,*ppc,**ppc);

一個正常變數zhic有一個地址(依電

dao腦不同版結果不同,我的電腦上是權1244996)和變數值'a',要取得其地址就要一個指標,加一顆星,即*pc=&c,而指標pc本身也是一個變數,有其地址和變數值,這裡的變數值就是c的地址1244996,所以輸出的第二項為1244996,如果要取得pc的地址,就要指向指標的指標,即**ppc=&pc,而ppc還是一個變數,他的值就是pc的地址了,我這裡是1244992,固輸出第三項為1244992,以此類推,想獲得ppc的指標,就來個指向指向指標的指標的指標,再加一顆星。

至於*ppc,看ppc的由來,c <- pc <- ppc ,那麼*ppc就是pc,**ppc就是c,也就是每加一個星就往來的方向降一級

所以這個程式(在我電腦上)的輸出結果就是 97,1244996,1244992,1244996,97

18樓:雲哉

char **p是二級指標,*p可以表示一個字串的首字元地址,p表示字串的地址

19樓:匿名使用者

舉個例子:char * *p;char a[9]; 假如來 **p=a[0]=10 (**p=*&a[0])

而*p就相當於源&a[0] 則p就相當於指向了bai*p 的指du針 (&*p=p,p=&&a[0])我也是剛學到這zhi裡,希望dao

對你有幫助~

20樓:匿名使用者

這是指向指標的復指標,從概念可制以明白,p依然是一bai個指標。這個指標特du殊的地方是它zhi所指向的還是dao一個指標,即*p是一個指標。再延伸一下可以知道,*p這個指標指向的是一個char型的數,即**p是一個char型的數字。

21樓:

p就是指向指標的一個指標咯,儲存一個指標變數的地址。

*p也還是一個指標,既然是指標,當然還是儲存一個地址,不過儲存的不是指標變數的地址,儲存的是普通變數的地址了。

22樓:匿名使用者

**p為指向指標的指標,那麼先給它賦個值,char **p;

char *a;

p = &a;

則p裡就是a的地址.*p則是a的值,**p是a指向的變數

c語言 main() {char a[]={"abcde"}; char *p=a; *(p+2)+=2; printf("%s",p+1); }執行結果

23樓:迴歸╮幼稚

因為p+2指向a[2],然後+=2,所以a[2]的值變為e。p+1指向a[1],輸出是從a[1]開始輸出字串,所以答案是 bede

24樓:塵葑的記憶

void main()

;char *p=a;

*(p+2)+=2;

printf("%s",p+1);

}以上**的執行結果是:bede

主要考查

的知識點是c語言中的指標回和字元數答組的關係。

C語言基礎問題,C語言2個基礎問題

第一題 首先你得明白如何看指標的定義極其型別 對於int p 3 你先將 後的用括號括住即 int p 3 後面是個變數,也就是說 p 3 資料型別是int。將其再分解 p 3 括號內是指標型,然而裡面我們看到的是一個陣列,這就是說,定義了一個指標陣列 這個陣列的沒個元素都是指向int型的指標 對於...

C語言裡。printf(「2 3 d」,i 2 3 這裡的2 3是什麼意思啊。求解答

為了使輸出顯示為2 3 所以執行的結果為2 3 2,你可以嘗試去改一下程式,刪除其中一個 就知道了。2的結果是這樣來的 2 3的意思是2被3取餘,取餘為2 餘數。c語言程式設計知識。多打了個 號吧?d輸出的是結果 輸出後應該是2 3 2 這樣才對的 給個最佳答案啊 是格式化輸入 格式字元 列印出來就...

C語言的system函式,C語言裡的system函式都有什麼用

system函式是包涵在stdlib.h標頭檔案裡的。我在tc3.0 裡就算無標頭檔案都可以用,他是c語言的語法嗎?這是編譯器的問題,不是語法問題 這個是包括在stdlib.h這個檔案上的。你主要可能是因為編譯器的關係 在vc等上面都要這個標頭檔案的 c語言裡的system函式都有什麼用 等於在程式...