程式設計師面試50題 指標的用法 5

2022-10-11 05:12:12 字數 1009 閱讀 5685

#includeint

main()

;

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...