c語言指標傳遞問題

2022-10-14 13:55:20 字數 1100 閱讀 1268

1樓:

看了前面兩位的回答,感覺意思是說對了,但卻沒有說得明明白白。

c的書上有句話,指標做函式引數,只能改變指標所指地址的內容,但不能改變指標所指的地址。

第一題中

t=c0[0];c0[0]=c1[0];c1[0]=t;

是對內容的操作,當然可以改變。

但第二題

卻試圖向改變q的地址,當然是無效的

2樓:

第一個傳遞的是指標,改變的是指標指向的變數,因此,函式執行過後,陣列內容發生了變化。

第二個引數也是指標,但是,改變的是指標的值,因此,函式執行過後,就不會發生變化。你把q+=3改成*q=*q+3,它的內容就會變了

3樓:匿名使用者

子函式會自動複製一份 傳遞來的引數 進行運算而不是對傳遞來的引數直接運算

1中雖然複製了,但是指向的地址一樣,改變複製過來的地址的值就相當於改變傳來引數所指向的值

2中雖然改變了,但是是函式自己複製的那一份,傳遞的引數沒動,所以沒用,實在要修正,只能用返回的方法。

4樓:

void point(char *q)

只改變了區域性變數q 沒有改變q指向地址的內容void point(char *q) 這樣就行了void swap1(int c0,int c1)第一題中void swap1(int c0,int c1) 與void swap1(int *c0,int *c1)

是一樣的c0,c1都是區域性變數用c0[i]或*(c0+i)改變指標指向的內容

5樓:草木犀

#include "iostream.h "

void point(char **q)

int main()

,char *p=b;

point(&p); //改變將指標p的指標傳出去 然後通過指標對p進行加

cout<<*p

6樓:

二題中僅僅是將p的變數(即b的地址)傳給了q,而並沒有實質上更改p的指向的地址值,一題中將地址值傳過去之後,對所指的值進行了值交換,所以兩者的操作就不同

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

記憶體對齊的緣故。p buf 作為一個指標,它的值是記憶體的某個位元組的地址。如果想要把 p buf 強制轉換版 成一個 unsigned int 型別的指權針,需要滿足一個必要條件,就是 p buf 的值必須能夠被4整除。之所以是4,是因為 unsigned int 是要佔4個位元組的 c語言結構...

C語言傳遞函式指標引數能否傳遞NULL

可以,但子函式中要謹慎處理,不然會出問題,如int fun int p void main 經常用到的time null 也是傳null指標的一個應用。能,引數能作為判斷 讀取資料來用,傳null完全沒有問題。而且在c 圖形程式設計中這種用法很廣泛 c語言函式宣告中將函式指標引數設定為null的預設...

關於C語言指標問題,求大神,C語言指標的問題,求大神!!

第一個函式的兩個指標是區域性變數,函式完了就銷燬了,換不換都一樣,第二個是直接操作指標指向的地方 記憶體單元 也就是直接操作變數。不恰當的比方,好比停車,有個圖紙記錄了每個車位停的什麼車,第一個就相當於另外拿了個圖紙畫了一下想要的位置,原來的圖沒變,函式結束後來的圖被扔了,原來的圖保留著,實際的車並...