[問題] 新手C語言的call by address不太會使用
以下是我的程式碼
#include <stdio.h>
#include <stdlib.h>
int val(int a, int b);
int add(int *a, int *b);
int main(void)
{
int a=5, b=10;
int *c, *d;
c = malloc(sizeof(int));
d = malloc(sizeof(int));
c = &a;
d = &b;
printf(" a = %d\n b = %d\n*c = %d\n*d = %d\n\n", a, b, *c, *d);
val(a, b);
printf(" a = %d\n b = %d\n", a, b);
add(c, d); // 非 add(&c, &d);
printf("*c = %d\n*d = %d\n", *c, *d);
system("pause");
return 0;
}
int val(int a, int b)
{
printf("=====call by value====\n");
a = 100;
b = 200;
printf(" a = %d\n b = %d\n", a, b);
printf("=====return=====\n");
}
int add(int *c, int *d)
{
printf("\n\n\n");
printf("=====call by reference=====\n");
*c = 100;
*d = 200;
printf("*c = %d\n*d = %d\n", *c, *d);
printf("=====return====\n");
}
我的問題在於
main裡呼叫add( )時,
實際參數要用add(c, d);
但是用add(&c, &d);就會有錯誤
因為我看這個網站
http://caterpillar.onlyfun.net/Gossip/CGossip/ArgReturn.html
int main(void) {
int x = 10;
....
printf("%d\n", increment(&x));
printf("%d\n", x);
return 0;
}
int increment(int *n) {
*n = *n + 1;
return *n;
}
他介紹的是傳&x,用int *n接收,
那我寫的傳add(&c, &d),用int add(int *c, int *d)接收,
為什麼會不行呢?
要用add(c, d)才不會失敗....
請問是怎麼回事呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.118.191
推
02/28 19:40, , 1F
02/28 19:40, 1F
→
02/28 19:42, , 2F
02/28 19:42, 2F
推
02/28 21:09, , 3F
02/28 21:09, 3F
推
02/28 23:27, , 4F
02/28 23:27, 4F
→
02/28 23:27, , 5F
02/28 23:27, 5F
推
02/28 23:40, , 6F
02/28 23:40, 6F
→
02/28 23:40, , 7F
02/28 23:40, 7F
→
02/28 23:41, , 8F
02/28 23:41, 8F
→
02/28 23:42, , 9F
02/28 23:42, 9F
→
02/28 23:43, , 10F
02/28 23:43, 10F
推
03/01 09:16, , 11F
03/01 09:16, 11F
推
03/01 10:02, , 12F
03/01 10:02, 12F
→
03/01 10:02, , 13F
03/01 10:02, 13F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):