1樓:網友
程式應該是這樣吧。
#include
main()
int a=30,b=20,*p,*q;
p=&a; /此處把a的位址給指標變數p,使p指向a
q=&b; /此處把a的位址給指標變數q,使q指向a
proc(p,q); 呼叫函式proc 注意,此處傳遞給函式的實參p,q,而傳遞給函式的。
printf("%d %d",a,b); 接上 值是a,b的位址,即&a,&b,所以形參和a,b共同佔用乙個。
接上 記憶體單元。
proc(int *p,int *q) /形參p與a佔乙個記憶體單元,形參q與b佔乙個記憶體單元。
int *t;
t=*p; /所以此處*p=a,*q=b,改變*p和*q的值相當於改變了a,b的值。
p=*q; /這裡實際上就是交換了a,b的值。
q=t; /所以在主函式輸出時為a=20,b=30
2樓:網友
你是想問 為什麼執行完還是 a =30 b = 20吧? 因為你的proc函式只交換了 形參,而實參卻並沒有跟著交換。雖然你用的是指標。
所以應該用傳引用的方式。
void proc2(int &x, int &y)int tmp = y;
y = x;
x = tmp;
呼叫這個函式: pro2(a,b); 就能交換a和b的值了。
3樓:網友
你後面寫的有點問題。
應該這樣。proc(int *p,int *q)int t;
t=*p;*p=*q;*q=t;
這樣用指標來交換位址,實際是交換了指標指向的位置,人後你在呼叫的時候這樣proc(&p,&q);傳兩個位址進來。
簡單的來說 就和 兩個人住在兩個p、q房子裡面,你把門派號給它交換了一下差不多。
這時候看來,住在p房子裡面的人和住在q房子裡面的人也就交換了。
c語言指標程式問題
4樓:琦炎羅晨濡
首先指出一下。
函式arradd中。
return
sum;這條語句應該在迴圈體外面;
首先你要知道,二維陣列說二維只是形象的說法,其實在記憶體中還是線性順序儲存的,p=array[0],array[0]其實是整個二維陣列的第乙個元素的位址,也就是array[0][0]的位址。當不斷arr++時,arr每一次都使arr指向下乙個int型資料,就是市每一次arr增加乙個2個或4個位元組,也就是乙個int型,首先是把第一列遍歷完了,然後進入第二列繼續,所以這樣是可以求和的。
其實對於二維乃至多維的陣列,你可以這樣理解,一維陣列很清晰吧,二維其實就是一維陣列的每乙個元素擴張成乙個陣列,這樣arr++就比較好理解了,先是arr[0]的每乙個元素,繼而arr[1]的每乙個元素。
2)這是都是正確的,a[0]是位址沒有錯,要注意int*p)[4];這樣定義的話,因為這裡的(*p)是乙個指標,所以p就是乙個指向指標的指標了,而a
和&a[0]都可以理解為指向指標的指標。
還有一點你要注意,指標和陣列有本質的區別,雖然有時可以互相代替使用。
c語言,指標指向另乙個指標的問題,為什麼報錯?
5樓:格里程式設計辦公技巧
圖中紅色框內**有誤,*(p+5)不是表示指標而是值。應改為。
q = p+5
另外補充說明,改成這樣雖然沒有語法錯誤,但是很明顯p+5已經超過陣列a的記憶體空間,需要注意。
6樓:聽不清啊
原來的q是乙個空指標,給空指標所指的區域賦值,當然就出錯了。
#include //中間多了乙個空格。
main ()
增加了陣列的大小。
int *p=a+5,*q=null;
q=(p+5); 原先的指向是陣列越界了。
printf ("d %d",*p,*q); 兩個數之間要加入空格。
7樓:一劍出血
宣告時 int *q = null;
這就是計算機最害怕的野指標,哦不,這還不是野指標,是強行指向0x0000 0000的必殺指標……
你可以宣告乙個臨時變數並將q指向它,但千萬千萬千萬千萬千萬千萬千萬千萬不可以讓乙個指標指向受保護的空間並嘗試寫入!!!
例如可以改為:
int *p=a+5, temp, *q=&temp;
c語言指標符號問題,C語言指標符號問題?
當你想儲存一個地抄址的時候不加 int a 0 p a 當你想取指標裡的值 的時候加 int b b p b a b 0 就是說把a地址儲存的值取出來。當 p的值還是指標的時候 int p null int q null int a 0,b 1 q a p q p a 結果就是q 指向a p指向q ...
c語言小程式的問題,c語言程式問題
注意標記符號所作用的程式域!其他的都是一些小問題,自己慢慢除錯這執行,相信你能執行成功的。c語言程式問題 c語言中只有傳遞值的一種方式,即使傳遞的是指標,還是指標的值,因此雖然p加了3,但是與pt無關,如果要修改指標形參,則要使用二重指標 include point char pt main pt ...
c語言程式填空問題,C語言程式填空問題
很明顯,第bai一個是開啟檔案du,因為下面提 zhi示了開啟失dao敗。已經給出了迴檔案指標file fp,必然答最後是判斷fp的值,但是fp一開始就是空,所以肯定不會直接判斷,必然是要求寫fopen函式,已經提示檔名稱,且明說了要寫檔案所以肯定是fopen f1.dat 但是問題出來了,是w什麼...