#includeintmain()
;
int *ptr=(int *)(&a+1
); printf(
"%d,%d
",*(a+1),*(ptr-1));//
*(a+1) =a[1];
}
解題:輸出?
答案:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],執行結果是2,5
&a+1不是首位址+1,系統會認為加乙個a陣列的偏移,是偏移了乙個陣列的大小(本例是5個int)
int *ptr=(int *)(&a+1);
則ptr實際是&(a[5]),也就是a+5
原因如下:
&a是陣列指標,其型別為int (*)[5];
而指標加1要根據指標型別加上一定的值,
不同型別的指標+1之後增加的大小不同;
a是長度為5的int陣列指標,所以要加 5*sizeof(int)
所以ptr實際是a[5]
但是prt與(&a+1)型別是不一樣的(這點很重要)
所以prt-1只會減去sizeof(int*)
a,&a的位址是一樣的,但意思不一樣,a是陣列首位址,也就是a[0]的位址,a+1是陣列下一元素的位址,即a[1];
&a是物件(陣列)首位址,&a+1是下乙個物件的位址,即a[5].
char* s="aaa"
;printf("%s
",s);
s[0]='b'
;printf("%s
",s);
有什麼錯?
答案:"aaa"是字串常量. s是指標, 指向這個字串常量, 所以宣告s的時候就有問題.
cosnt char* s="aaa";
然後又因為是常量,所以對是s[0]的賦值操作是不合法的.
程式設計師50題(JS版本)(七)
程式31 有乙個已經排好序的陣列。現輸入乙個數,要求按原來的規律將它插入陣列中 var test 213,134,134,84,62,11 const num 33 test.push num test.sort function a,b else if test i return a b cons...
程式設計師50題(JS版本)(五)
程式21 有一分數序列 2 1,3 2,5 3,8 5,13 8,21 13.求出這個數列的前20項之和。var arr var count 20 for var i 0 i count i else if i 1 else for var i 0,sum 0 isum arr i 1 arr i ...
程式設計師50題(JS版本)(二)
程式6 用 號輸出字母c的圖案 console.log console.log console.log console.log console.log console.log console.log console.log console.log 結果 程式7 將乙個正整數分解質因數。例如 輸入90...