1樓:匿名使用者
剛打錯了 不好意思 給我分哦 我改了3次了a+1 不能
p是指標可以p++,也可以p+1
a是陣列名簿不可以a++,但可以a+1
a++其實是a=a+1
知識點:指標運算,陣列定義和運算
答案不保證完全對,我也很久沒看那些了
int *p 是定義一個整形的指標變數
2樓:心雲細雨
*(a+1);*(p+1);*(p++)都等於a[1];
陣列名稱是陣列第一個元素的地址。
*p=a初始化指標讓它指向陣列a第一個元素的地址。
陣列和指標的區別:可以改變指標包含的地址,但是不能改變陣列名稱引用的地址。
a+1沒有改變a的地址,a++(a=a+1)改變了a的地址。
3樓:北大青鳥東莞金碼學校
a++;不可以
a是首地址不是指標 不能可賦值的左值 不能用++符對其操作
但是a+1這樣的表達是可以了 因為這裡a的值作為+的一個運算元但是a本身的值是沒有改變的
4樓:幽蘭一草
a 代表陣列名,是第一個元素的地址,它是const定值,不能加減操作,也不能自加操作。即a=a+1,a++都是錯誤的. 而 *(a+1)才能表示a[1]
而p是指標,可以進行加減操作和自加操作,後面的兩種可以。
5樓:毛毛的牛牛啊
a++,a是首地址不是指標,不能用++表示,其它都是對的
謝謝採納!!
6樓:匿名使用者
其實這種問題最好的解決方式莫過於自己動手實踐了,編個小**測試一下,幾分鐘的事情;
經過自己測試得到的結果不但更有成就感而且還不容易忘記;
測試**可以列印出以上表示式的實際值,也就是地址值;
c語言int a[5],*p; p=a;和p=&a;的對錯問題~希望詳細點,謝謝啦
7樓:
有了int a[5],*p;,p=&a;顯然就是錯誤的。int a[5],*p;說明了a和p都是int *型指標,只是a是常指標,p是指回針變數,那麼p=a;就合情答合理;&a是指向a[5]的指標,與它型別匹配的是int (*)[5],而不是int *。所以p=&a;的等號兩邊型別不匹配,編譯都過不了……
8樓:涼夏風歌
1.int a[10],*p;
p=a;//a是首地址
2.int a[10],*p=a;//定義時賦值3.int a[10],*p;
p=&a[0];
以上都是等效的,沒有p=&a的
譚浩強是說前者對
9樓:拾夢人
p=&a,是把a的地址賦給p,再通過*p得到a所賦給p的地址,取a裡面的內容 ,對於陣列的話好像兩個都對的,我用vc6.0編譯的時候都通過的
10樓:黑綠藍
不要太相信書上寫的話了,遇到問題最好的辦法是動手試一試
聽過的會忘記,看過的只能記住,只有做過的才能理解
11樓:丁榮衛
p=a,將陣列名(即陣列首地址)賦值給指標是對的
p=&a,編譯將會出錯
12樓:匿名使用者
前者是對的,邏輯上兩個都是對的,p指向a的地址,a和&a都表示陣列地址(陣列特有)
懷疑後一個可能編譯不過
13樓:路圖元
a是一個陣列,所以它本身就表示這個陣列的首地址,所以你要讓p指向這個地址就直接p=a就好了!當然,如果你拼要加&的話,你也可以用p=&a[0];
c語言若有下列說明和語句:int a[4][5], (*p)[5]; p = a; 則對a陣列元素
14樓:匿名使用者
如果定義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)。
15樓:鍵盤未找到
a.表示&a[1].
b.a[3]
c.&a[1][3]
d.a[0][2]
16樓:匿名使用者
首先呢,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 呢就是第二個元素的地址,*取資料咯。
17樓:一方通通
本題中定義了一個二維陣列c和一個陣列指標p並初始化讓它指向c,顯然此時p中的各元素為地址,
a中p+1,此時的1代表的長度是整個二維陣列c的長度,p+1將讓p指向c陣列後面的元素,故不能引用c陣列中的成員,故選項a錯誤;同理,選項b和選項c都不正確,
d中p[0]+2代表的是第一行第三個元素的地址,而*(p[0]+2)將代表第一行第三個元素的值。
若有定義:“int a[9], *p=a”,則不能表示a[1]地址的表示式是()。
18樓:有了三分的威少
答案選c.
因為a是地址,地址是常量,常量不能當做自增自減運算子加或減
19樓:
陣列名是一個指標常量!不能被改變和賦值!c錯。不管是a++還是++a都不可以。
20樓:匿名使用者
c.a++ a++表示的內容起始還是和a相同,此處還是表示a[0]的地址
21樓:420妙妙
是c,因為指標指的是地址,指標變數是指用於存放地址的變數,可以通過指標變數可以訪問它所指向的變數,題目int a[9], *p=a算是初始化p,也就是對指標變數的初始化,使p指向變數a
c語言題:若有定義int a[9],*p=a;則p+5表示( )
22樓:匿名使用者
答案選:b
剛剛看到a[5]就選了
*p=a;指向的就是a[0]
p+5就相當於向後移動5個,就是a[5],表示地址如果是*(p+5),就表示值
23樓:匿名使用者
你好,選b。
int *p = a表示指標p指向陣列a的首地址。也可以說是a[0]的地址。所以p+5指向a[5]的地址
若有定義:int a[5], *p=a;則不能正確表示陣列元素a[i]的是 a.*(a+i) b.*(p+i) c.p[i] d.*p[i]
24樓:
答案是d
a[i]=*(a+i)
本題目中p=a
那麼上面a換成p就有
p[i]=*(p+i)
25樓:
不能正確表示陣列元素a[i]的是d。d把元素值作為地址取其中內容了。
26樓:匿名使用者
dp是指標,p[i]相當於*(p+i),*p[i]就訪問到一個不知是什麼地方的地方去了
問:列印結果是什麼?p=(int*)(&a+1)是不是等價於*p=a[1]? 30
27樓:
輸出是2,5。*(a+1)不用說了;因為a==&a[0],&a就是整個這一行的指標,&a+1就是下一行的指標(不過這裡沒有下一行而已),實質就是&a+1指向了5後面的位置;把它強制為int *型後賦給p,p-1就只向前挪動1個int資料的空間,所以p-1指向了5,*(p-1)自然就是5。
28樓:月光疾風
列印結果分別是:2, 1
p=(int*)(&a+1)等價於*p=&a[1];注意p是指標,指向的地址,故要取a[1]的地址,前面加個取地址符&
29樓:
執行結果是:
2,5#include
int main()
;int *p;
p=(int *)(&a+1);
printf("%d,%d\n",*(a+1),*(p-1));
return 0;}
??設有int a[20], *p=a; 則下面中哪個與a[1]不等價( )。 a.p[1]
30樓:自我程式設計
a為陣列名,相當於常量指標,不能進行賦值運算,編譯會錯。
所以選c *++a
31樓:金色潛鳥
c。 按運算子優
抄先級襲, *++a; 右到左結合,即 *(++a)a 是陣列名, ++a 是不合法的表示式。a 的指標增 1, 要寫成 (a+1) ,而不是 ++a.
所以與a[1]不等價。
其它3個都等價。
32樓:匿名使用者
答案選bp = a;讓a指向int a[2][2]的int a[2];p++讓p指向int[2]的第二個地址,int a[1][2]的地址,所以**p的值是3.
怎麼學習C語言?如題謝謝了
崔月禕 學好c語言的運算子和運算順序 這是學好 c程式設計 的基礎,c語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程式設計語言。在表示式方面較其它程式語言更為簡潔,如自加 自減 逗號運算和三目運算使表示式更為簡單,但初學者往往會覺的這種表示式難讀,關鍵原因就是對運算子和運算順序理解不透不全。...
c語言,下面的程式結果為啥是,c語言,下面的程式結果為啥是
恭喜你,你發現了一個非常重要的系統漏洞形式。有很多對系統的破解都是基於此原理,下面我此進行一下解釋。首先先大概指明錯誤 char buf 4 是分配了4個位元組的儲存空間,strcpy buf,aaaa 是向buf寫入5個位元組的資料,因為別忘了字串最後總隱藏著一個字串結束符 0 也就是說,strc...
下面C語言的定義可以嗎
不可以,int a b 這句不對。不能用變數b定義陣列元素個數,必須使用常量。如果想使用變數決定陣列大小,需要在堆上動態分配記憶體,用 int pa int malloc b sizeof int 如果你的編譯器支援c99標準,就可以這樣寫,否則就不能這樣寫。主要看你的編譯器是否支援,從c語言語法角...