1樓:匿名使用者
*p=a+sizeof(a)/sizeof(int)-1;//這句把陣列a最後一個元素的地址賦給指標p
然後利用迴圈讓指標p不斷地前移,每前移一次把對應的陣列元素值加一;
最後指標p移動到陣列a的前一個位置,所以*(p + 1)就是陣列的第一個元素,並且加過1的.
所以*(p + 1) 就是 11 + 1 = 12.
以上是程式的總體思路。
由於陣列a是int型別的,所以其中每個元素都佔用四個位元組,並且指標p也是int型別的,所以指標p每進行一次p--就會在記憶體中往下移動四個位元組。
subl $48, %esp
movl $11, 20(%esp)
movl $12, 24(%esp)
movl $13, 28(%esp)
movl $-4, 32(%esp)
movl $-5, 36(%esp)
movl $-6, 40(%esp)
這是陣列初始化的彙編**,可以看出陣列後面的元素佔用高地址,p--就是往陣列前面移動就好理解了。
2樓:
c.已經執行驗證。
其中,sizeof(int)=4,sizeof(a)=4*6=24.
故,p=a+6-1=a+5。執行得12.
#include
void main()
,*p=a+sizeof(a)/sizeof(int)-1;
//其中,sizeof(int)=4,sizeof(a)=24.
while(p>=a)
//這裡p>a
//多次迴圈最後在a[0]=11處停止迴圈,此時的a[0]=a[0]+1=12
printf(「%d\n」,*(p+1));
//最終指向的位置為11+1=12的位置}
3樓:成靈慧
你要做什麼
這裡*p=a+sizeof(a)/sizeof(int)-1;
指標已經指到陣列最後一個元素了
你後面又 弄了個迴圈,做什麼啊
4樓:帳號已登出
正確答案是c
12int *p=a+sizeof(a)/sizeof(int)-1 的作用是讓p指向陣列的最後一個元素。
5樓:匿名使用者
12最後輸出的 *(p+1)=a[0]+1
C語言的問題,C語言問題。。。
呵呵,除了第三題,其他都不容易。有空的編吧,我看著 如果你真正掌握了c語言,其實也不是很難 c語言問題。double 在輸入 輸出時,要使用 lf 格式符。scanf lf lf f1,f2 include int main else for i lower i upper 2 i 2 return...
c語言問題,C語言問題!
prid32是個什麼?而且你的雙引號得加轉義符吧?去掉prid32前後的雙引號,另外prid32是否有定義?你的這個軟體支援c99或者c11嘛 就像vc6.0版本太老就不支援c99 看看軟體支不支援 沒有巨集定義,在標頭檔案下面加 define prid32 d c語言問題!因為s是一個指向floa...
c語言問題,c語言問題
include void main 定義f 0 1 f 1 1 for i 2 i 20 i 從2開始到19做迴圈,這裡你少打一個i f i f i 2 f i 1 例如當前i 2則f 2 f 0 f 1 2 迴圈繼續 i 3則 f 3 f 2 f 1 3 迴圈繼續.for i 0 i 20 i 從...