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是整型變數,結果會...