int a a則與表示式 a 1 2不等價的是A p Bp 1 2 C p 2 D a

2021-03-27 07:39:32 字數 3949 閱讀 3116

1樓:匿名使用者

是a吧,a已經不是乙個位址了

b,c,d和*(a+1)+2都還是乙個位址,要加上*()才能輸出值的

若已定義 int a[ ]={1,2,3,4},*p=a,則下面表示式中值不等於2的是a.*(a+1)b.*(p+1)c.*(++a)d.*(++p)

2樓:匿名使用者

選c 因為 a陣列是常量 不能用 ++a 其他的都是可以的

??設有int a[20], *p=a; 則下面中哪個與a[1]不等價( )。 a.p[1]

3樓:自我程式設計

a為陣列名,相當於常量指標,不能進行賦值運算,編譯會錯。

所以選c *++a

4樓:金色潛鳥

c。 按運算子優

抄先級襲, *++a; 右到左結合,即 *(++a)a 是陣列名, ++a 是不合法的表示式。a 的指標增 1, 要寫成 (a+1) ,而不是 ++a.

所以與a[1]不等價。

其它3個都等價。

5樓:匿名使用者

答案選bp = a;讓a指向int a[2][2]的int a[2];p++讓p指向int[2]的第二個位址,int a[1][2]的位址,所以**p的值是3.

設int a[]={1,2,3,4},b,*p=a;,與b=*p++;等價的語句是

6樓:匿名使用者

應該選擇b,這個涉及到符號優先順序的問題,++符號的優先順序要比*高,所以應該是*(p++),

不過,b最終等於1,因為,++在p的後面所以要先遠算完了這個式子,然後p再++;

7樓:匿名使用者

b。後置++的優先順序高於一元*。

8樓:匿名使用者

選【b】

後自增是在表示式結束後再自加的,加不加括號都一樣。。

9樓:匿名使用者

選b ++不管擴不擴起來都是後執行。

知int a[]={1,2,3,4,5,6},*p=a+2;則p[2]的值是( c )。

10樓:匿名使用者

a+0指向1,a+1指向2,a+2指向3,*p=a+2;那麼p指向3,p[2]就是p+2指向的資料

p+0指向3,p+1指向4,p+2指向5,所以p[2]的值是5

int a={1,2,3,4}; int *p=(int *)((int)a+1); p指向了什麼?

11樓:饅頭上線了

1. int a = {}; 貌似應該是int a = {};

2. "(int)a",已經把a的位址強轉成int型數字(32bit),所以「((int)a+1); 」實際指向了整個陣列記憶體塊的第二個位址,即a[0]的第二個位元組。

3.這種用法比較危險,特別是在某些特殊處理器上,如果對32bit(int)變數的訪問,訪問位址不是4位元組對齊的話,會有想不到的***。你可以將記憶體看做是乙個字元型的大陣列,指標其實也是乙個整數,它存貯著某個整型值,假設記憶體陣列名為m,那麼訪問指標指向的元素其實就是m[(int)p]。

在對指標本身做加減法的時候,如果增加或者減小到的值為1,那麼系統其實預設的得到的指標值是 p + sizeof(t) * 1,這裡你吧a轉換成了乙個整數,並取得了該整數加1的值,其實你的到的是p + 1,所以p的指向就向前移動了乙個位元組,指向了a【0】的第二個位元組的位址。

12樓:李磊

你可以將記憶體看做是乙個字元型的大陣列,指標其實也是乙個整數,它存貯著某個整型值,假設記憶體陣列名為m,那麼訪問指標指向的元素其實就是m[(int)p]。在對指標本身做加減法的時候,如果增加或者減小到的值為1,那麼系統其實預設的得到的指標值是 p + sizeof(t) * 1,這裡你吧a轉換成了乙個整數,並取得了該整數加1的值,其實你的到的是p + 1,所以p的指向就向前移動了乙個位元組,指向了a【0】的第二個位元組的位址。

其實指標的這種特性會經常使用在同種型別值需要不同解釋的情況,比如要判斷機器的大小端(大小端可以上網查詢),你可以定義乙個共用體:

union hl;

在程式中你可以初始化:

hl.ele = 0;

然後你再定義乙個字元型指標:

char *p = hl.ele[0];

你就可以通過(*p)的值判斷機器的大小端了。

int a[4][3],(*prt)[3]=a,*p=a[0];不能正確表示a[1][2]的表示式?

13樓:匿名使用者

(*prt)[3] 表示的是乙個指標,這個指標能夠指向 大小為3的陣列

跟普通的指標 int *ptr 表示只能指向版 乙個權int一樣所以(*prt)[3]=a 實際跟 a所表達的意思差不多這道題的答案應該是d,完全不知道表示的是什麼

已知int a[]={1,2,3,4,5,6},*p=a;,則值不等於2的表示式是______。 (*p)++為什麼

14樓:go學龍

(*p) = 1,(*p)++是字尾所以表示式的值還為1

15樓:匿名使用者

如果換成這個表示式 ++*p,它的值就是2了,對比一下,你應該明白了吧?

16樓:鑄信

*p=2,常量不能自加運算,

5、已知:int a[2][3]={1,2,3,4,5,6}, (*p)[3]=a;則下列表示式不是4的是 ( )。

17樓:匿名使用者

這道題很難,需要仔細考慮。

a陣列資料如下:

a[0][0]:1

a[0][1]:2

a[0][2]:3

a[1][0]:4

a[1][1]:5

a[1][2]:6

p是指向有三個元素陣列的指標,也可以認為是乙個指向指標的指標。

a.*p為三元素陣列的首位址,+3後會指向陣列中的第4個元素,發生了越界,還好,a是二維陣列,越界後不會出錯,而是指向了二維陣列中的第二個三元陣列的第乙個元素,取值得4。

b.與a相比少了乙個間接運算子*,所以它表示的是乙個位址,非值。

c.p+0後沒有任何變化,與a相同。

d.a[0][3]其實越界了,好在後面還有a[1][0]等資料,於是將a[1][0]中的陣列4作為其值。

答案是b

編寫程式驗證了答案,顯示如下:

*(*p+3)=4

*p+3=1638204

*(*(p+0)+3)=4

a[0][3]=4

18樓:

選ba陣列資料如下:

a[0][0]:1

a[0][1]:2

a[0][2]:3

a[1][0]:4

a[1][1]:5

a[1][2]:6

p是乙個指向3個元素陣列的指標,就是說p+1相當於&a[1],這裡的p+1會移動乙個一維陣列的大小,就是說3個int的大小

*p相當於a[0]

所以a和c一樣,*p+3相當於&a[0][3],指向4,再解引用就變成了4

從上面的分析就看出了d是對的,而b是指向這個4的指標

19樓:o寒風夜襲

(*p)[3]=a=a[0][0]=1;

*(*p+3)=a[1][0]=4;

*p+3=&a[1][0],其值指向a[1][0]的位址,*(*(p+0)+3)=*(*p+3)=4;

a[0][3]=3;選d.

20樓:匿名使用者

答案是b

猜測法:p+0還是p,所以a、c相等,而b明顯與a不同,故答案是b。

普通的邏輯函式表示式化成與非與非表示式有什麼方法嗎?數位電路

南訣 先化簡成最簡與或式,再用反演律。例如 拓展資料 1 邏輯函式 logical function 是數位電路 一種開關電路 的特點及描述工具,輸入 輸出量是高 低電平,可以用二元常量 0,1 來表示,輸入量和輸出量之間的關係是一種邏輯上的因果關係。仿效普通函式的概念,數位電路可以用邏輯函式的數學...

Intx3,y2則表示式printfdx

逗號運算子順序執行 x y x 3 2 1 x y 8 5 x 1 2 1 3 所以結果為3 c語言中 int x 3,y 2 則表示式x x y 8的值為?y 8 10 x 10 x x 10 x 30 x 30 x x 30 x 60 int x 5 int y 2 x x x 8,x prin...

已知有變數 int x 3則表示式 4 5

4 5 0 10 3 3 3 3 6 x 3 1 4 答案應該是6吧。2 設int型變數x有初始值3,則表示式x 5 10的值是 這個語句等價於以下兩句 x 5 10 x x 1 也就是說,x是在表示式執行完後,再自增的。參與運算時,x 3,3 5 10 15 10 1.5,由於x是整型變數,結果會...