c語言指標問題。若有int a0,1,2,3,4,5,6,7,8,9,0p a,i

2021-04-18 17:29:14 字數 3463 閱讀 9784

1樓:匿名使用者

a. a[p-a]     p=a,p-a=0,這裡就是bai引du用 a[0]

b. *(&a[i])   &a[i]表示取第i+1個元素的位址zhi, *位址,

表dao

示引用位址中版的資料,這裡就是引用a[i]c. p[i]         p是指標,位址,可以用權陣列元素引用方式來引用陣列元素。p[i]就是a[i]

d. *(*(a+i))  a+i是第i+1個元素的位址,*(a+i)是引用位址中的資料,是個整數,*整數,是錯誤的引用方式,會引起程式異常。

2樓:顯示卡色彩校正器

首先說,i是初始bai化了的。du

p的位址就是a的位址,zhip-a=0,沒問題&a[i]代表&a[i]的位址,加上

dao*代表存放版的數,也就是a[i],沒問題p[i]意思

權就是a[i],沒問題

a是a[0]的位址,*(a+i)指向a[i],再加*就不知道指到**去了,因為a[i]不是位址

c語言指標問題。。 若有int a[]={0,1,2,3,4,5,6,7,8,9,0},*p=a,

3樓:匿名使用者

a: a[p-a] = a[0],即bai陣列a的第乙個元素。du這裡的a沒有定義,估計應該本來是zhia吧,輸入題目的dao

時候不專小心句首自動大寫了

b: a[i]是數屬組a的第i個元素,&a[i]是該元素的位址,所以*(&a[i])是該元素的值。該項等價於a[i]

c: p[i] = a[i],即陣列a的第i個元素值d: 這個是錯誤的。*(a+i)是陣列a的第i個元素值,*(*(a+i))語法錯誤

若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;則輸出結果不為5的語句

4樓:瀚漠

答案:d

對於陣列a[10],a就是該陣列的首位址,定義指標p賦值為a,那麼a和p的操作基本相同:

a[5]=p[5]=*(a+5)=*(p+5),對於d選項,p[5]是個int值,再取*就不對了。

5樓:假面

答案:d

對於陣列copya[10],a就是該陣列的首位址bai,du定義指標p賦值為a,那麼zhia和p的操作基本相同dao。a[5]=p[5]=*(a+5)=*(p+5),對於d選項,p[5]是個int值,再取*就不對了。

整數(int型別的常量)有幾種書寫形式,程式中的整數一般採用十進位制寫法。用十進位制方式寫出的乙個整數就是普通數字字元組成的乙個連續序列,其中不能有空格、換行或其他字元。

c語言問題:已有定義int a[10]={1,2,3,4,5,6,7,8,9,10} 要求通過指標完成從一維陣列中刪除下標為k的元素

6樓:匿名使用者

兩個問題:

1.輸入k之後 ,要重新將 p 指向 a 即10行前+一句 p = a;

2.最後乙個for越界,i=9 時 p+i+1 就成了 p+10

7樓:匿名使用者

「baifor(p=a;p-a<10;p++)」這個迴圈du已經讓p指向zhi了陣列中最後乙個元素,所以「for(i=k;i<10;i++)」在這個迴圈之前應該讓daop重新指回陣列的內第乙個元素,故改為for(i=k,p=a;i<10;i++)

另外 刪除乙個元素之後 陣列中只有9個元素,所容以應當把a[9]賦值為'\0'或者在最後乙個迴圈中控制條件改為p-a<9

已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},c語言問題

8樓:匿名使用者

int (*ptr)[3]=a這句,

bai將a的首地du址賦值給了ptr,ptr表示的是zhi指向乙個含有三個int的數dao組的指標,*((ptr+1)[2])等價於*((ptr+1)+2),等回價於*(ptr+3),這表示從答

陣列a的首位址向後移動3個單位,每個單位為乙個含有3個int的陣列,所以一共向後移動了9個單位,即得出執行結果10!

要想正確表達a[1][2],應該是(*(ptr+1))[2],陣列的運算子[ ]比間值運算子*的優先順序高,(*(ptr+1))[2]表示a向後移動乙個單位即三個int,此時ptr指向4,再往後移動2個int指向6。

其實遇到這類問題畫記憶體結構圖比較容易理解了

9樓:匿名使用者

(*ptr)[3]=a,陣列

指標只有3行,陣列a有四行,所以(*ptr)[0]=,(*ptr)[1]=,(*ptr)[2]=,所以*((ptr+1)[2])表示的是(*ptr)[2]裡面的回

第二個元素就是答10

10樓:匿名使用者

*((ptr+1)[2])這種用法是不對的,陣列的下標相當與解引用,比如a[2]=*(a+2)

因此,上面的替換做法是(*(ptr+1))[2].

11樓:巫馬尓絲

*((ptr+1)[2])和copy*(*((ptr+1)+2))是等價的,而第二個算式可以演化成*(*(ptr+1+2)),也就是*(*(ptr+3))。

你既然會用指標表示陣列,那麼我用一維陣列給你舉個例子:

int arr[3];

這裡如果要表示陣列的第二個元素,有2種方式 arr[1], *(arr+1),

就是說arr[1] == *(arr+1)

那麼你*((ptr+1)[2])我們只看括號內的內容(ptr+1)[2] ,它按照上邊的等式轉化一下就是*((ptr+1)+2),去掉裡面的括號*(ptr+1+2),也就是*(ptr+3);

*((ptr+1)[2]) == *(*(ptr+3)) == a[3][0]

很好的解釋了為什麼你寫的第乙個表示式是10了,

你如果要用ptr表示a[1][2]就應該是*(*(ptr+1)+2)或者*(ptr+1)[2]這樣寫才對。

c語言問題:已有定義int a[10]={1,2,3,4,5,6,7,8,9,10} 要求通過指標完成從一維陣列中刪除下標為k的元素

12樓:郯安陽郝北

a中存放

的是陣列a[10]中元素的位址,而對於二維陣列intx[3][4],*p;

p=*x,

x[0],

x[1],

x[2]存放的是陣列x[3][4]種元素的位址,x存放的的是x[0]的位址,也就是位址的位址。所以在二維陣列定義的時候可以寫成p=x[0]卻不能寫成p=x而是在前面多乙個*號,*x為元素位址,而x位位址的位址

13樓:以辰良況樹

兩個問題:

1.輸入k之後

,要重新將p指向

a即10行前+一句p=

a;2.最後乙個for越界,i=9

時p+i+1

就成了p+10

c語言指標問題。若有float a 25,b,p那麼語句p a和p怎麼

p a,指的是將a的數值賦予指標指向的變數。p a,指的是將a的位址賦予指標p,即指標p指向a float a 25,b,p b中的 p b指的是定義指標p的同時將p賦初值。若有定義float a,b,p 下述正確的是?a.p b scanf f a p 這題正確的是d a,p是取位址的值,如p b...

C語言指標問題,C語言指標問題

這個演算法最後的時候 p和q都是指向a的,在最後這個時候a的結構是,q之前的是所有的除了版 之外權 的字元。q之後的都是原來a裡面的資料,對於這個時刻是髒資料。最後把q指向的那個位置賦值為 0可以在遍歷a的時候,不遍歷到髒資料,而這個時候p正好指向的就是 0,所以 q p 迴圈結束條件是 p 0,因...

C語言若有定義 int a 1,b 2,c 3則語句 a丨丨 bc,執行後b的值為多少

2,或運算只需乙個滿足就行 a 2不等於0個,故或運算結果為一,b運算沒得到執行 a 算得結果是邏輯真,跟後面的部分進行邏輯或運算,不管後面的部分算得結果是真還是假,最終結果都是趙,所以後面的部分就不算了。所以運算後 b 的值還是 2。同理,c 的值還是 3。c語言,若有定義 int a 1,b 2...