若有定義int p 3則定義了名為p的指標變數它可以指向每行有整數元素的二維陣列

2022-03-09 08:28:52 字數 5945 閱讀 3076

1樓:

問題1:首先,這裡只是定義了一個指標型變數,這個p是一個指向長度為3的整型陣列得指標,那麼這個陣列最大有多少行,取決於先面這個賦值(int array[n][3];p=a;),在這裡雖然n有多大,那麼p就有多少行,它能不停得加下去,直到n-1;

問題2:這個是編譯系統的問題了,就像我們下得所有c語言**,計算機是不能識別的,因為計算機只能識別二進位制,那麼如何能讓計算機識別大家寫得c語言**,就需要編譯,這裡就是語法規則,編譯系統會按照我們定義的型別和陣列範圍進行地址上得變化,比如這個例子,首先用的是整型,加入編譯系統認為整型是2個位元組,這裡陣列長度是3,那麼p+1相當於地址加了2*3=6,如果編譯系統認為整型是4個位元組(visual c++ 6.0就是預設整型4個位元組 ),那麼p+1相當於地址加了4*3=12,說到底,這個是編譯系統需要考慮得問題,讀者不用太過於追究,除非你準備開發編譯器。

希望我的回答你還滿意。

2樓:匿名使用者

樓主你好!

首先(*p)[3]是一個指標陣列,意思就是p這個指標是指向一個含有3個元素的陣列的,那麼p指標每一次加1就相當於把p中存的地址加6(前提是int型別佔2個位元組,在vc中是佔4個位元組)。

舉個例子:

int a[3][3];

int(*p)[3];

p=a; //也就是把陣列a的首地址存放到p中那麼p[1]就是a[1][0]的地址,p[1][0]就等於a[1][0],而p[1][2]就等於a[1][2];

這就說明了為什麼是二維陣列了

3樓:

p 是一個指向有三個整數的陣列的指標型別變數。 p+1 就是指向下一個三位陣列。 這樣下去,不就相當於是二維陣列了。

4樓:匿名使用者

*p 即代表了這是一個整形陣列的首地址,則說明p中每個元素又包含3個元素。

5樓:山西優就業

首先(*p)[3]是一個指標陣列,意思就是p這個指標是指向一個含有3個元素的陣列的,那麼p指標每一次加1就相當於把p中存的地址加6(前提是int型別佔2個位元組,在vc中是佔4個位元組)。

舉個例子:

int a[3][3];

int(*p)[3];

p=a; //也就是把陣列a的首地址存放到p中那麼p[1]就是a[1][0]的地址,p[1][0]就等於a[1][0],而p[1][2]就等於a[1][2];

這就說明了為什麼是二維陣列了

定義int(*p)[3]; 則定義了一個名為p的指標變數 它可以指向每行有三個整數元素的二維陣列

6樓:

問題1:首先,這裡只是定義了一個指標型變數,這個p是一個指向長度為3的整型陣列得指標,那麼這個陣列最大有多少行,取決於先面這個賦值(int array[n][3];p=a;),在這裡雖然n有多大,那麼p就有多少行,它能不停得加下去,直到n-1;

問題2:這個是編譯系統的問題了,就像我們下得所有c語言**,計算機是不能識別的,因為計算機只能識別二進位制,那麼如何能讓計算機識別大家寫得c語言**,就需要編譯,這裡就是語法規則,編譯系統會按照我們定義的型別和陣列範圍進行地址上得變化,比如這個例子,首先用的是整型,加入編譯系統認為整型是2個位元組,這裡陣列長度是3,那麼p+1相當於地址加了2*3=6,如果編譯系統認為整型是4個位元組(visual c++ 6.0就是預設整型4個位元組 ),那麼p+1相當於地址加了4*3=12,說到底,這個是編譯系統需要考慮得問題,讀者不用太過於追究,除非你準備開發編譯器。

希望我的回答你還滿意。

7樓:鄂冰濯玉

樓主你好!

首先(*p)[3]是一個指標陣列,意思就是p這個指標是指向一個含有3個元素的陣列的,那麼p指標每一次加1就相當於把p中存的地址加6(前提是int型別佔2個位元組,在vc中是佔4個位元組)。

舉個例子:

inta[3][3];

int(*p)[3];

p=a;

//也就是把陣列a的首地址存放到p中

那麼p[1]就是a[1][0]的地址,p[1][0]就等於a[1][0],而p[1][2]就等於a[1][2];

這就說明了為什麼是二維陣列了

若有定義:int(*p)[4],則p是一個指向含有四個整型元素的一維陣列的指標。這句話是正確的嗎?

8樓:匿名使用者

正確的。

陣列指標是指向陣列地址的指標,其本質為指標;指標陣列是陣列元素為指標的陣列(例如 int *p[4],定義了p[0],p[1],p[2],p[3]三個指標),其本質為陣列。陣列指標的使用在某些情況下與指標陣列很相似,要注意區別。

p是一個指標變數,它指向包含4個int元素的一維陣列,此時p的增量以它所指向的一維陣列長度為單位。

*(p+i)是一維陣列a[i][0]的地址;*(p+2)+3表示a[2][3]地址(第一行為0行,第一列為0列),*(*(p+2)+3)表示a[2][3]的值。

9樓:匿名使用者

正確的!!!int (*p)[4]這兒的p是一個指標變數,它指向的是含4個元素的一維陣列。

而int *p[4]是定義指標陣列p,它由4個指向整形資料的指標元素組成。

10樓:匿名使用者

原描述正確。請與int *p[4]比較,後者則是建立一個四個元素的指標陣列。

11樓:

不正確是包含4個指向整型的指標元素

12樓:匿名使用者

這個問題我知道!不正確吧,定義了四個指標變數,這是指標陣列。

若有定義:int **p;則p是一個什麼變數

13樓:

p是指標變數.

int *******p;

不管你寫多少個 * 號 p 都是指標變數

這個變數儲存的資料是 一個記憶體的地址

14樓:匿名使用者

對於int **p來說,p所指的物件是指標,那麼++p就是讓p的值增一個指標的大小,雖然指標所指對像可大可小,但是指標自己的大小卻是一定的,目前的系統上一般是4位元組(64位系統我沒用過,可能是8位元組)。也就是說,對char *p和long *q來說,p和q本身佔記憶體容量是一樣大的(雖然char和long佔記憶體不一樣大)。

很多人以為「指向陣列的指標」就是「指向指標的指標」,於是有人寫這樣的**:

int a[2][3];

int **p = a;//錯誤

這個**的錯誤之處在於a是一個陣列,它的成員也是陣列,所以a叫做「陣列的陣列」——c++中嚴格說來沒有二維陣列。那麼,你要用一個指標來記錄a,就要用一個能表示「陣列的陣列」的指標,以下**是正確的:

int (*p)[3] = a;//正確

只有這樣才能保證++p使p指向a的下一對像(該對像是一個陣列)。

順便提一句:不要寫成「int *p[3];」

15樓:羽龍飛

**p是指向指標變數的指標。、

舉個例子就很明白了

int a=10;

int *pia;

pia=&a;

int **p;

p=&pia;

則*p就等於pia;

**p就等於*pia,而*pia等於a,即**p等於a=10;

(1)定義一個整型指標變數p,使它指向一個5個元素的一維陣列. (2)使用指標移動的方式,輸入5個整型陣列元素.

16樓:勵若

(1)int (*p)[5];

(2) #include

int a[5] = ;

int* p = a;

for(int i=0; i<5; ++i)(3)int* q = (int*)(malloc(5*sizeof(int));

(4)#include

int a[5] = ;

for(int i=0; i<5; ++i)(5)#include

int a[5] = ;

int b[5] = ;

int* p = a;

int* q = b;

for(int i=0;i<5;++i)

}(6)

for(int i=0;i<5;++i)

for(int i=0;i<5;++i)

(7)std::cout << p << q << a;

int(*p)()

17樓:匿名使用者

樓主你好。首先學習指標是有好多概念容易混淆。下面我來幫你區別一下:

1、int(*p)[4];------ptr為指向含4個元素的一維整形陣列的指標變數(是指標)

2、int *p[4];-------定義指標陣列p,它由4個指向整型資料的指標元素組成(是陣列)

3、int(*)[4];--------實際上可以看作是一種資料型別。也就是第一個(int(*p)[4];)中定義的p的資料型別

其實你要看這種到底是什麼,就是要看他最先和誰結合。 比如1中p先與*結合,那就說明p本質是一個指標;而2中p先與後面的[4]結合,說明他本質是一個陣列。再慢慢理解。

希望能幫到你。如有疑問可以再問我。

18樓:

p是指向函式的指標變數,這題選c。

具體用法:

你可以定義一個 int func()的函式;可把函式func()賦給p作為p的值,即把func()的入口地址賦給p,以後就可以用p來呼叫該函式,實際上p和func都指向同一個入口地址,不同就是p是一個指標變數,不像函式名稱那樣是死的,它可以指向任何函式,就看你想怎麼做了。在程式中把哪個函式的地址賦給它,它就指向哪個函式。

c語言:若有定義 int *p, 則表示式 p++ 的值就是 p 所指向的變數的地址值加1?

19樓:末了待續

這是錯的,p沒有進行初始化

20樓:匿名使用者

我也是剛學指標。

p就是所指向的變數的地址。

*p就是所指向的變數的值

因此 p++就是地址值加1吧,額,我也不確定。因為我還沒瞭解到有關儲存地址的知識。

我覺得應該是加1了。

21樓:

錯誤,要看變數佔用的地址空間,這裡是加sizeof(int)printf("%d",*(p++));

printf("%d",*(p--));

兩次輸出結果怎麼可能一樣呢,

printf("%d",*(p++)); 輸出2printf("%d",*(p--)); 輸出3

22樓:劉文正粉絲

你把++和--寫p的前面

*(++p)

*(--p)

你這玩意和指標一點關係也沒.....你前面學的不好啊~自增和自減最好是寫成單獨的語句

你的那個p沒用,用a就可以表示

為啥指標要區別型別?就是因為這p++這裡是加1,但邏輯上有加sizeof(int)個數.如果double和int都用一個指標,那鬼知道這p++在邏輯上是加sizeof(int)個還是sizeof(double)個?

23樓:匿名使用者

若有定義 int *p, 則表示式 p++ 的值就是 p 所指向的變數的地址值加1?---這句話是錯的。p++後的結果是地址加上一個整數,該整數指標指向變數型別在記憶體中佔用的位元組長度。

//為什麼兩次輸出結果一樣--因為語句中是對++或--之前的值進行操作。改為++p,--p就會不一樣了。

回答完畢。

24樓:

這個要怎麼講呢,p在定義的時候是有初值的,只是沒有進行初始化,這個值有沒有效不一定,所以p所指向的是不是變數不好說,但是p加一後,地址是肯定挪了一位......

這樣吧,沒有初始化,就是為地址無效,即沒有指向變數,所以後面的那句話視為錯誤.

若有定義 int x,a則語句x a 3,a 1 執行後,x a的值依次為請解釋下,謝謝

x a 3,a 1 括號裡是逗號運bai算符,規則 從du左到右依zhi次求值,最dao後面的為最終變 內量,所以過程是 容 a 3 臨時變數 a 1 臨時變數存放4x 臨時變數。x 4 a 3,a 1 是個逗號表示式,表示式依次從左向右執行,表示式的值為最後一個表示式即a 1的值 這樣,a 3,x...

若有以下定義intx3,y2,則表示式yxy後的y值為

y y x y y y x x y y y x 3 2 此時,x 1y y 1 y 2 1 y等於3,x等於1 一步一步來y x是5 5 y是多少呢就出來了 答案是3。c語言 已有定義int x 3,y 4,z 5 則表示式 x y z 1 y z 2的值是?答案是1。涉及到的運算子 運算子優先順序...

若有定義inta21,2,3,4p則p1表示的陣列元素是

p 0 a 1 是將a 1 陣列的地址賦值給了p 0 為了更好的理解,我們定義一個int q q p 0 這樣 p 0 1 就等價於 q 1 了,由於q是int型的指標並指向的a 1 的第0個元素a 1 0 q 1就會指向a 1 0 的下一個元素了,也就是a 1 1 p 0 指向的是a 1 0 的地...