1樓:風若遠去何人留
這個要從傳值和傳指標呼叫區別說起.
首先,每個函式的形參,都相當於一個函式的區域性變數.
那麼傳值呼叫時,比如函式 fun(int a);的時候,呼叫fun(b);
相當於新建了一個區域性變數int a=b; 然後 改變a的值自然不會改變b.
而傳指標呼叫,比如 fun(int *p);
這時呼叫fun(q); q是另外一個指標.
那麼等效於 int *p = q;
這時如果改變p的值,也不會影響q,但如果改變*p的值,由於p和q相等,所以*q也會同步改變.
如果改成另一種常見的形式
fun(&a)
那麼*p就是a值,自然會改變的.
2樓:匿名使用者
如果形參是指標,那麼其傳遞的是變數的首地址,那麼在函式中向這個地址賦值,就可以改變指標所指向地址的內容,如:
void get(int *a,int n)
3樓:匿名使用者
《征服c指標》這是一本講c語言指標的書,我看了還是挺不錯了,有很多有趣的想法,讓我恍然大悟,指標還是要靠自己去領悟,別人說永遠都不說不清楚。
在c語言中怎樣使形參值改變實參值也跟著改變
4樓:風若遠去何人留
在c裡面 是無法做到形參改變 實參值同步改變的。
只能通過傳地址的方式
即引數型別為指標
這樣 形參指向空間修改,可以使得實參指向空間同步修改,因為是同一塊記憶體區域。
另外,在c++中,可以通過引用傳參,來實現你說的目的。
5樓:匿名使用者
在c語言中,通過指標傳遞,可以在自定義函式操作其他函式內的變數值。
把實參的地址傳給形參,這樣形參得到地址間接訪問實參本身。
c++裡還可以按引用傳遞,把「實參本身引用過去」可能更好理解,引用內部實現也是指標
6樓:夢想作坊
利用返回值,或者是指標。
c語言中指標作為形參,**如下:
7樓:
你要用*去解引用,這樣才能改變指標指向記憶體的值。
你的swap函式寫的有問題,正確的寫法有人給了。
至於為什麼*x,*y的值沒有改變,因為你交換的是2個形參的值,雖然你傳入的是指標,但是你沒有把它們當成指標來用,最後的結果跟傳非指標值是一樣的。
如果想真正改變實參的值,就必須交換指標指向的記憶體,而不是單純交換指標變數本身。形參是通過堆疊傳遞的,只有用類似 *x = 1;這樣的語句操作指標指向的記憶體,才能影響到實參,否則實參的值是不會改變的。
其實最好的方式就是去vs裡除錯執行,仔細觀察執行過程,就能比較清晰地瞭解指標。單純的理論是站不住腳的,拉出來溜溜就一清二楚了。
想對你能有幫助。
8樓:夢
#include
void swop(int *x, int *y)int main(void)
你的交換函式有問題,首先交換順序就錯了,指標傳遞的是地址,t 要是值,才能將指標指向地址所代表的值進行交換
9樓:匿名使用者
首先,void swop(int *x, int *y)傳進是指標沒錯,但是,引數你可以這樣理解,int* 是型別 x,y 是引數,
所以是傳進swop的還是 x,y (x,y其實是資料所在的地址),亦是說,swop函式裡交換你可以將
x y 地址指向的資料交換(t = *x ;*x=*y;*y=t ),但就不能交換 x,y 本身。
說得不清楚,寫個例子吧
int add(int a,int b) 與int add(int * a, int *b);
這兩者的引數型別是 int 與 int *
既然 第一個int add(int a,int b) 裡的 a b 不能修改,那麼 第二個int add(int * a, int *b)裡的 a b 也肯定不能修改的咯
10樓:小瓜瓜的大店
#include
void swop(int *x, int *y)int main(void)
拿去試試你就知道了,為什麼了,注意觀察記憶體地址的變化swap函式接收的只不過是原先x y中的內容,而這個內容,就是 3,4 的地址,對吧
swap將得到的地址進行交換,swap函式在棧上執行,執行完就銷燬了,不會影響到真正的3 和4,
你再看看這個,傳過去的是x,y的地址,swap就能通過這個x y的地址找到 3 4的地址,這樣就能真正的操作到3 4 了
#include
void swop(int **x, int **y)int main(void)
一樓的解釋更加清楚明白
c語言中當形參是指標,實參是什麼?當實參是指標,形參是什麼?為什麼? 5
11樓:小莫喲
第一個問題:
形參是指標,實參就應該是對應資料型別的地址。
例如:swap(int *x,int *y)int main()
第二個問題:
當實參是指標的時候,形參應該是什麼?
其實很簡單,你只要把
第一問列出來 ①實參:地址 ②形參 :指標一一對應出來 ①實參:
指標 ②形參:指標的指標因為你要在區域性函式中改變實參,就需要傳遞它的地址,指標也是如此,把它類比為int型變數就好了。
個人理解,希望能幫到你,如有不對,歡迎指正
12樓:匿名使用者
形參是指標,實參肯定要接收指標的,,你說是什麼?
int a = 10;
int *p = &a;例如&a的形參,實參就是*p了。等等。。自己舉一反三吧。
c語言中指標怎麼使用?
13樓:圓隨緣滅
1、指標指向變數:
下面有這樣一個**塊:
int main()
void test(int x,int y)
最後輸出的結果還是a=10,b=15。
因為在函式呼叫時,實參和形參之間只是值傳遞。
但我們使用指標結果就不一樣了,如:
int main()
void test(int * x,int *y)
輸出結果a=15,b=10。變數a和b的值發生了交換。
這是因為我們利用指標訪問變數的儲存單元,間接修改變數的值。
2、指標指向陣列:
定義一個陣列並初始化,int array[5]=,定義一個指標變數並把陣列的地址賦給它,int *p=array,注意陣列名就是陣列的地址,而且陣列的地址就是首元素的地址。
因此我們的指標變數就指向了陣列的首元素,*p=2。如果把(p+1),那麼指標變數就指向了陣列的下一個元素5,因此我們可以利用指標來遍歷陣列的各個元素:
int main()
;int *p =array;for(int i=0;i<5;i++)return 0;}
3、指標指向字串:
我們都知道用陣列儲存字串,如char name[20]="jack",上面已經簡單講述了指標指向陣列,所以我們可以這樣做,char *name="jack",指標變數指向字串的首個字元並可以依次訪問字串的各個字元。
4、指標指向函式:
我們需要知道怎樣表示一個指標指向函式,說白了就是語法要正確,下面我也取一個**塊來說明一下:
int sum(int x,int y)
int main()
不難發現上面**塊里語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。
而我們要知道怎樣定義一個指標指向函式,int (*p)(int,int)這是固定寫法,前面的int是指標將來指向的函式的返回值的型別,如果沒有函式返回值,那就是void,後面括號裡的兩個int當然就是指標將指向的函式的形參。
5、指標指向結構體:
我們首先首先定義一個結構型別,
struct student
;再根據型別定義結構體變數struct student stu=;
定義一個指標指向結構體型別,struct student *p;把結構體變數stu的地址賦給指標變數p,p=&stu;
我們可以有3種方式來訪問結構體中的屬性ages:stu.ages=15;(*p).ages=15;p->ages=15;不過第三種方式在c語言中只能用來指向結構體。
14樓:匿名使用者
我是這樣理解的:
在c語言中,你需要定義變數,那麼你所定義的這個變數本身你要理解兩層含義:
(1)變數中的值是多少?有了值我們可以直接拿變數參與運算,eg. int a=5;在計算的時候a就表示5;
(2)變數儲存在記憶體中的什麼位置?變數的儲存位置,就是變數的地址,那麼這個地址可以用指標來儲存,eg. int a=5, *p=&a; 在這裡p就是指標變數,儲存了變數a的地址,這個時候你要是用a變數的值,即可以直接用a,也可以用*p,*p是通過p這個指標(也就是a的地址),間接的找到a,在程式中*p與a是等價的。
15樓:匿名使用者
指標是指向地址的,所以你對指標修改也會影響到原地址的值,所以當你需要在函式裡修改函式外的變數時可以考慮指標,當然指標還可以連線結構體裡的節點之類的,後面還有跟函式有關的,只要多揣摩就會了解了
16樓:欣夢魂
指標可以理解為地址即指向地址的指標,在使用之前要明確三個問題,指標的型別,指標指向的型別,指標指向值的記憶體區域。通過傳遞值的地址來傳遞值
17樓:我是張玉柱
就是地址的地址,之後會學到指標型函式就是函式引數是指標型別的,我們平時學的是int ,float等等,還會學到函式指標就是呼叫函式的地址。
在C語言中,當形參和實參都為指標時,在函式中傳遞的是地址嗎
是的,指標這玩意兒,就是專門和地址掛鉤的!這程式是你寫的嗎?要是你寫的話 你就看下面的三段話 就能找出。1.比如你定義一個函式void add int a,int b 這裡的a和b就是形參。2.當你進行函式呼叫的時候,add 1,2 這裡的1和2就是實參。3.形參就是沒有賦值的變數,實參就是有賦值的...
C語言中,用陣列名作形參和用指標作形參有區別嗎
還是有差別的 雖然大多數時候都可以相互用最大的差別就是指標可以改版變,可以通過指標改變指向內權容的值,但陣列名不行 舉個例子 分別作為形參 int num 10 p p num 此時p指向陣列的第一個元素我在主函式裡呼叫兩個函式 1 sum num 2 sum p 2,10 這就有區別了,因為num...
C語言中指標問題 設int a,那麼a的意義是什麼呢
這是一個2級指標,指向int型別的指標的指標。p 就是1級指標,就是一個一維陣列的陣列名,再 才是資料!a 0 是一個記憶體地址,是a 0 這個一維陣列的開始地 址。可能在char型別中使用比較多,char a 3 5 的話,a 0 就是一個字元專陣列的開始地屬址了,可以讀入或輸出。int p 是一...