指標表示元素的值還是地址,c語言二級指標中二級指標p, p是地址還是值,為什麼有的時候就是值而不是地址

2022-11-28 04:26:27 字數 4052 閱讀 9832

1樓:

指標是值,這個值代表著一個記憶體地址。

來說個生動點的,我們把記憶體抽象成格子,它從0起編號一直到n。

格子裡面可以放a數字,也可以放b命令碼,還可以放c格子編號。

a數字: 數字代表一切,整數,浮點數,是數字,字元也是數字,字串就是按一定規則排列 的數字。所以,數字可以表達一切資料。

b命令碼: 命令就是告訴cpu做什麼,加減乘除,移動到某格子,取出某格子的東西放入另一個格子(其實,這也是一個數字)。

c格子編號:格子編號就是地址了,也許,我們可以給把它簡稱」指標「(當然,這也是一個數字。等等,我們好像明白了什麼)。

一,普通指標,就是一個廣義上的格子編號,這個格子裡面可能放的是任何東西

二,函式指標

有時為了方便我們把一定數量的數字,一定數量的命令,和一定數量的格子編號

列在一張表上面,只需要拿到這張表,我們就可以一口氣做一些事。

我們把這張表叫函式。這種表可能是佔用了一定數量的連續格子來存放。

而表開始的格子編號實際上就代表了函式的位置,通常這個編號可以叫函式指標。

2樓:八神97坤

我去,ls一群人都理解錯了,p剛開始是指向a[0]的,*(p++)表示的是a[0]的值,不信你自己試吧,後自增運算子,是先取當前的值,在自加

3樓:匿名使用者

表示a[i]的值吧?如果寫成p++就表示地址,前面加個*就表示值了,我的理解是這樣的

4樓:

p是指標,它的地址

*p是指標地址所指的值

所以*(p++)表示a[1]的值

p++ 標識a[1]的地址,即&a[1]

5樓:匿名使用者

表示a[1],p是指標,就是地址,取*號,就是內容了

c語言的指標問題。*(p+i)是代表取值呢還是取地址?

6樓:匿名使用者

定義int *p=a,那麼p+0就是

a[0]的首地址,

p+i就是a[i]的首地址,p+2就是a[2]的首地址,*(p+0)就是a[0][0]的地版址,*(p+1)就是a[1][0]的地址,*(p+2)就是a[2][0]的地址;而定義權int (*p)[4];代表p是一個陣列指標,指向一個4個 int大小的陣列,此時p=a之後,p就是一個指向sizeof(int)*4這麼大小的空間了,*(p+0)就是a[0]行的地址了,*(p+1)就是a[1]行的地址了,所以*p和(*p)[4]不是同一個指標,他們指向空間的的大小不一樣。

7樓:匿名使用者

首先,你應該明確指bai針dup的型別,是int *p 還是 int ** p,兩者都可zhi以指向陣列a的首地址dao。

如果你定義 int *p[4],這是版一個指標陣列,權那麼p實際上是一個常量。 *(p+i)與p[i]的意義一樣,是一個指標,或者說是陣列p中的一個元素。這個p與a看不出任何聯絡的。

8樓:匿名使用者

int *p=a

這是定自義指標,表示p是a[0][0]的地址,*(p+i)代表的是a[0][i]的值,

int (*p)[4]

定義一個陣列指標,*(p+i)就是a[i][0]的地址,*(*(p+i)+j)是a[i][j]這個值

9樓:與子如初見

int *p,則p是一

個整形指復針,指向一制個整形變數的地址。

int (*p)[4],p是陣列指標,指向的是一個含有四個整形元素的陣列的首地址。此時*(p+i)肯定是地址,因為p是陣列指標,p = a;,*(p+1)就相當於求出a[1]的首地址。

如果你不懂了你可以用**試一下,這樣的話印象就會深刻的。

c語言二級指標中二級指標p,*p是地址還是值,為什麼有的時候就是值而不是地址

10樓:

對於一級指標而言,*p是取值,對於二級指標而言,*p是取地址,但是地址又是無符整形資料,所以在二級指標中你把*p當值來用的話,編譯不報錯,但是不合規定。

11樓:豎子求明

這個問題也是困擾的,我到現在都有點亂。

p是指標,有就是地址。

*p是指標向的值。

對於數值型的,這樣理解沒錯。

不過對於字元等其他型別有點怪,舉個例子:

char str=「abc」,*p;

p=&str;

輸出*p 結果是a

輸出p 結果是abc。

12樓:966曹長

p是指向指標的指標,對p取值當然還是個指標

c語言中如何用指標運算子來表示一個二維陣列的元素及地址?

13樓:匿名使用者

首先你得知道a就是陣列第一個元素的地址,而二維陣列a[i][j]可以理解為a[i]陣列每個元素儲存的是一個j個元素大小的另一個陣列,這樣理解的話,先說*(*(a+i)+j),a+i就不說了相當於被過載操作符一樣,指標+1的含義就是加一個單位的資料大小,然後*(a+i)則相當於a[i]的值對吧,而a[i]的值就是下一個陣列的指標現在源**相當於*(a[i]+j),然後自己分析吧,很簡單的,不過說實話沒必要真麼糾結,真寫**沒多少人閒的蛋疼真麼寫的,給自己製造麻煩不說,後期維護也會很痛苦的

14樓:樑昌仔

二維指標,就是說第一維是指標,第二維還是指標;

拿*(*(a+i)+j)來說:a是陣列的首地址吧,然後+i,就是說a地址向後偏移i位。就是a+i的地址了,注意,這裡a+i只是地址,用*符號取出該地址的資料,就是*(a+i),這裡*(a+i)就是第一維指標,它指的是地址,不是資料。

而且後面的*(a+i)+j就是說以*(a+i)為首地址,偏移j位,然後使用*取內容,這裡就是第二維了,取到的資料就是實際資料了

c語言中指向陣列元素的指標, 有一點是 "一個指標變數可以把陣列名或第一個元素的地址賦予指標變

15樓:hdu我愛c語言

比如說陣列 int a[10];之後你第一個指標 int *p;p=a或者p=&a[0],這兩個是同一個意思。

你這樣操作之後 p ,a ,&a[0],基本就是同一個意思。

16樓:唐麗梅

就是當你定義一個陣列m的時候,然後定義一個變數pm指向它,則這個變數pm一開始的時候指向的是這個陣列m的首地址。無論這個陣列m裡面有沒有值,都是指向第一個元素m[0]。

陣列名是陣列名,不是首地址。

但是一開始分配的時候,陣列的首地址正好是第一個元素的首地址。

17樓:開尋芹

&m就是首地址,不是指向。

18樓:匿名使用者

其實很多課本上的話都說的比較費解!!(也是這麼摸索過來的)這句話的意思真正來說是強調陣列的陣列名其實就是一個指標,它指向該陣列的首地址。比如int a[10],這個陣列內有10個int型元素,當你用你的第一個元素時,會使用a[0],它的作用就是*(a + 0),根據你學過指標知識,意思就是讓指標a偏移0次後取出資料。

相應的a[1]~~~其實都是在陣列首地址的基礎進行偏移後得到的。所以當然可以把陣列名賦予給一個指標變數啊。

靜態連結串列中指標表示的是() a 下一結點在記憶體中的地址 b 下一元素在陣列中的下標

19樓:匿名使用者

b 下標,所謂靜態連結串列就是沒有指標的,用下標模仿這個指標的功能的

迴圈佇列的頭指標指向的是隊首元素的前一個位置還是當前 或者是後一個位置?

20樓:

迴圈佇列的頭指標指向是隊首元素的前一個位置.隊尾指標指向隊尾元素.

21樓:匿名使用者

在佇列前面執行的是刪除,用的是頭指標,應該是指向隊首的前一個位置。。

22樓:韋康寧

隊頭指標指向前一位置是為了方便插入新元素,

隊尾指標指向隊尾元素是為了取出或刪除隊尾元素.

C語言程式設計中 二維陣列中元素指標的表示 的例題,求詳解

二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。一個二維陣列在計算機中儲存時,是按行儲存的,即先儲存第一行的元素,再儲存第二行的元素。當把每一行看作一個整體,即作為一個大的陣列元素時,原來的二維陣列也就變成一個一維陣列了。而每個大陣列元素對應...

C語言,傳址函式問題。指標與地址

b是指標b指向的變數而不是地址,比如int b a,在這裡並不是把a的地址賦給了 b而是賦給了b,這裡是對指標變數b進行了初始化,在這裡 是為了表明變數b是指標變數,以和整形變數區別,所以及很容易理解把a的地址 a賦給b了。陣列名作為實參的時候,如果是一維陣列,那麼它傳遞的就是一維陣列的第一個元素的...

c語言絕對值函式C語言中絕對值怎麼表示?

c語言中求絕對值的函式有兩個 abs 和fabs 1 abs 是用來求整型表示式的絕對值,比如 abs x 就是求整型變數x的絕對值。2 fabs 是用來求浮點型表示式的絕對值,比如 abs x 就是求浮點型變數 float型或double型 x的絕對值。擴充套件資料 函式呼叫的一般形式為 函式名 ...