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 的地...