1樓:匿名使用者
教你個簡便的方法。
*(p+i)等價於p[i],反過來也成立。只要把答案試下就知道了。
取位址和顯示內容是兩個相反的操作,可以互相抵消的)
b. *(p+3)=p[3]=a[3]
d. *(*p+2)=*(*(p+0)+2)=*(p[0]+2)=p[0][2]=a[0][2]。選d
2樓:寂寞而莫我知也
d是對的.把a賦值給陣列指標,下標的引用是*(*(p+n)+n) 或者a[n][n] 說的很清楚了
3樓:匿名使用者
d是對的,選擇的是a[0][2],相當於*(*(p+0)+2)
若有下列說明和語句:int a[4][5], (*p)[5]; p = a; 則對a陣列元素的正確引用
4樓:勾竹劇庚
首先呢,a是二維陣列,不解釋。
然後呢,p是乙個指標,什麼樣的指標呢,版就是指向一維陣列的權指標,而且這個一維陣列的元素個數呢是5.
然後呢,p=a;就是把p指向a陣列。
分析選項:
ap+1
.因為p是一維陣列指標,所以p每+1就是+1行。錯誤。
b*(p+3)是指第4行的首位址,訪問不到元素。需要再*c*(p+1)+3
對位址+3
沒啦意義
d*(*p+2)
*p是第0行首位址
+2呢就是第二個元素的位址,*取資料咯。
5樓:
(*p)[5]; -- (*p) 是乙個指標,抄(*p)[5] 用來指向有5個元素的陣列。
p=a; 就是 p=&a[0]; 指向a 的第一行的開始(如果是 p=&a[1]; 指向a 的第2行的開始)
語句裡 (*p) 是 第一行的開始
*(*p+2) 裡的 *p+2 是 第一行裡的第3個元素的位址,*(*p+2) 是該元素的值
int a[4][5]=;
int (*p)[5];
int i,j;
p = &a[0];
printf("*p= %d \n", *p ); // 列印位址
for (i=0;i<20;i++) printf("%d ", *(*p+i) ); // 列印所有陣列元素的值。
6樓:匿名使用者
p)[5]; -- (*p) 是一bai個指標,(*p)[5] 用來指向有du5個元素的陣列zhi
。p=a; 就是 p=&a[0]; 指向a 的第dao一行的開始內(如果是 p=&a[1]; 指向a 的第2行的開始)
語句裡容 (*p) 是 第一行的開始
*(*p+2) 裡的 *p+2 是 第一行裡的第3個元素的位址,*(*p+2) 是該元素的值
int a[4][5]=;
int (*p)[5];
int i,j;
p = &a[0];
printf("*p= %d \n", *p );
for (i=0;i<20;i++) printf("%d ", *(*p+i) );
7樓:匿名使用者
此題很簡單的,你只要明白a是二維陣列就好了,所以要訪問裡面元素必定有兩個*號,三維,四維依次類推
8樓:匿名使用者
*(*p+2) a[1][2]
若有定義:int a[5],*p=a; 則對a陣列元素位址正確引用的是( )。 &a[5] p+2 a++ &a 說詳細點謝謝
9樓:匿名使用者
若有定義:int a[5],*p=a; 則對a陣列元素位址正確引用的是(p+2 )。
&a[5]//錯誤,因為越界了
p+2 //指標,指向第三個元素的位址,即&a[2],正確a++ //語法錯誤,a為位址常量不可++&a //a本身就是位址,不需要增加&
10樓:自我程式設計
對a陣列元素位址正確引用 p+2 。
p指向a首位址(也就是a[0]的位址),p+2就是a[2]的位址,相當於&a[2]。
&a[5]是錯的,訪問越界了,陣列元素最後乙個是a[4]。
a表示陣列的首位址,本身是位址常量,不能賦值。所以a++是錯了。
&a也是錯的,a本身就是位址。
已知:int a[]={1,2,3,4}, y, *p=a;則執行語句y = (*++p)--;之後, 陣列a各元素的值變為?
11樓:匿名使用者
已知int a=, y, *p=a;則執行來語句y = (*++p)--;之後自, 陣列a各元素的值變為1,1,3,4 。
標準函式int(x)其基本功能是得到乙個不大於x的最大整數,如int(3.59)=3,int(-2.01)=-3。
int函式是乙個用途很廣的函式,在教學中能有目的的分列其使用技巧。
c語言沒有規定各種整數型別的表示範圍,也就是說,沒有規定各種整數的二進位制編碼長度,對於int和long。
12樓:
b正確,選b。++p使p指向了2,*++p就是a[1],(*++p)--就是a[1]--。變數y的值是2,y=a[1]--;是把a[1]的值賦給y後才對a[1]作減一運算。
13樓:匿名使用者
執行過程是p++,然後y=*p;然後(*p)--。
即p的指標位增加一,然後賦值,最後指標對應值減一,即y=a[1],然後a[1]=a[1]-1;
綜上答案是b、b
14樓:匿名使用者
先++p,p指向a[1],
再*p,=2;
賦給y,y=2;
最後*p=2,--後,*p=1
所以是b b
int c[4][5],(*p)[5];p=c;能夠正確引用c陣列元素的是() a p+1
15樓:兔子
選ba p本身就是陣列c的首位址了,再對它取位址沒有語法錯誤,但是也沒有實際意義
b p + 3是c[3]的位址,*(p + 3)就是c[3]c c[5]陣列下標越界
d c也是陣列c的首位址,同a
請採納答案,支援我一下。
c語言若有下列說明和語句:int a[4][5], (*p)[5]; p = a; 則對a陣列元素
16樓:匿名使用者
如果定義int (*p)[n];p1=a;p1++後,p指向a[1][0];
則p+j將指向a[0]陣列中的元素a[0][j]。
由於a[0]、a[1]┅a[m-1]等各個行陣列依次連續儲存,則對於a陣列中的任一元素a[i][j],指標的一般形式如下:
p+i*n+j,相應的如果用p來表示,則為*(p+i)+j;
元素a[i][j]相應的指標表示為:
*( p+i*n+j) ,相應的如果用p1來表示,則為*(*(p+i)+j)。
推出以下的等價關係:
a+i == p+i;
a[i] == p[i] == *(a+i) == *(p+i);
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)。
17樓:鍵盤未找到
a.表示&a[1].
b.a[3]
c.&a[1][3]
d.a[0][2]
18樓:匿名使用者
首先呢,a是二維陣列,不解釋。
然後呢,p是乙個指標,什麼樣的指標呢,就是指向一維陣列的指標,而且這個一維陣列的元素個數呢是5.
然後呢,p=a;就是把p指向a陣列。
分析選項:
a p+1 .因為p是一維陣列指標,所以p每+1就是+1行。錯誤。
b *(p+3)是指第4行的首位址,訪問不到元素。需要再*c *(p+1) + 3 對位址+3 沒啦意義d *(*p+2) *p是第0行首位址 +2 呢就是第二個元素的位址,*取資料咯。
19樓:一方通通
本題中定義了乙個二維陣列c和乙個陣列指標p並初始化讓它指向c,顯然此時p中的各元素為位址,
a中p+1,此時的1代表的長度是整個二維陣列c的長度,p+1將讓p指向c陣列後面的元素,故不能引用c陣列中的成員,故選項a錯誤;同理,選項b和選項c都不正確,
d中p[0]+2代表的是第一行第三個元素的位址,而*(p[0]+2)將代表第一行第三個元素的值。
c語言若定義int a[5],*p=a;則對a陣列元素正確引用為哪個?為什麼?
20樓:
選d,c中p最多加4,因為陣列是從0開始的!
若定義int a[5],*p=a;則正確引用陣列元素的是求詳細分析過程 謝。。。
21樓:及時澍雨
若定義int a[5],*p=a;
則a選項中,*&a[5],
&a[5]是a[5]的位址,
*&a[5]是a[5]本身
但數列中沒有a[5]這個元素,錯誤。
*與&為逆運算
b選項中*a+2
*a為a[0]
則*a+2為a[0]+2,不是a[2],錯誤c選項中*(p+5)
p+5=a+5為a[5]的位址
*(p+5)為a[5],
如同a中,數列中沒有a[5]這個元素,錯誤。
d選項中,*(a+2)
a+2為a[2]的位址
*(a+2) ==a[2]與a[2]等同選d
已知f x 2 的定義域為,求f(2x 1)的定義
問 f x 2 的定義域是 1,2 不應該是f x 2 的定義域是1 x 2 2嗎?不是,是自變數x的範圍是 1,2 若3 x 2 4,為何f x 的定義域為 3,4 x 2是f x 2 中,括號中的整個部分,所以f x 中的整個部分 x 的範圍同f x 2 中的整個部分 x 2 即使1 x 3 2...
已知f(x 10)定義域是( 1,3)求f( 3 x 定義域
已知f x 10 定義域是 1,3 求f 3 x 定義域f x 10 的定義域是 1,3 就是f 1 10 至f 3 10 即f 11 至f 7 有定義,3 x 11時,x 8,3 x 7時,x 4,所以 f 3 x 的定義域為 8,4 f x 10 f y x 10 y y 10 x x的定義域是...
已知定義int a 2,則表示式a a a a a的值是
這個表示式無意義,編譯器會給出警告資訊。該表示式的值與編譯器相關 非要執行,看一下這句在gcc給出的反彙編 0x401476 mov eax,0x1 0x40147b sub eax,dword ptr esp 0xc 0x40147f mov edx,dword ptr esp 0xc 0x401...