功能swap2
有兩個參數,int *a
,和int *b
的存儲器交換混淆。這些是指向整數值指針的指針。那麼爲什麼當你在swap2
執行如int tmp = *a; *a = *b;
這樣的行時,它是否會改變這些值的內存位置。 *
不會參考在參數中聲明的指針嗎?由指針
int main()
{
int x = 42;
int y = 9;
printf("x = %d, y = %d\n", x, y);
swap1(x,y);
printf("x = %d, y = %d\n", x, y);
x = 42, y = 9;
swap2(&x, &y);
printf("x = %d, y = %d\n", x, y);
printf("---\n");
int z = 77, w = 33;
int *p = &z;
int *q = &w;
printf("*p = %d, *q = %d, p = %p, q = %p\n", *p, *q, p, q);
swap2(p,q);
z = 77, w = 33;
printf("*p = %d, *q = %d, p = %p, q = %p\n", *p, *q, p, q);
swap3(&p, &q);
printf("*p = %d, *q = %d, p = %p, q = %p\n", *p, *q, p, q);
printf("z = %d, w = %d\n", z, w);
return 0;
}
void swap1(int a, int b)
{
int tmp = a;
a = b;
b = tmp,
printf("a = %d, b = %d\n", a, b);
}
void swap2(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
printf("*a = %d, *b = %d\n", *a, *b);
}
void swap3(int **a, int **b)
{
int *tmp = *a;
*a = *b;
*b = tmp;
printf("**a = %d, **b = %d\n", **a, **b);
}
'swap3'將指針*指針*指向整數,其中有兩個級別。 – dreamlax 2014-09-21 23:33:10
swap1是無用的,唯一的影響是打印診斷。 swap2是'int's(+診斷)的標準交換。 swap3是交換'int *'s,但診斷並不是最好的......無論如何,您可以將前向聲明(與源文件的省略頭部中的includes一起,我衷心希望)如果您定義函數並在之後使用它們。 – Deduplicator 2014-09-21 23:35:58