c語言,如題,int a p a下面不能表示a

時間 2021-08-30 11:01:39

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 的

include define maxsize 100 給陣列定義一個空間typedef struct redtype 紙牌的資訊 typedef struct sqlist 對紙牌進行翻轉 void faceringt sqlist l for i 1 i 52 i 顯示正面號printf n co...

怎麼學習C語言?如題謝謝了

崔月禕 學好c語言的運算子和運算順序 這是學好 c程式設計 的基礎,c語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程式設計語言。在表示式方面較其它程式語言更為簡潔,如自加 自減 逗號運算和三目運算使表示式更為簡單,但初學者往往會覺的這種表示式難讀,關鍵原因就是對運算子和運算順序理解不透不全。...

二級C語言,看下面程式

首先k 2,然後你進行一次迴圈後,k自增兩次,變成4,然後執行下面的語句,所以s 1。然後當k 4的時候,s 1,j 4,然後執行內層迴圈,s 1 4,然後j自增等於5,s 5 5,然後j再自增為6,跳出內層迴圈。k自增兩次後等於6,不成立,跳出外層迴圈。然後輸出s的值,s 10.include v...