刚才通过汇编大略理解C了语言的指针
如下题目可以更好的佐证:
void swap(int i, int j)
{
int temp;
temp = i;
i = j;
j = temp;
}
int main(void)
{
int a = 2, b = 3;
swap(a, b);
printf("a = %d, b = %d/n",a b);
return 0;
}
实际上只是交换了swap函数中的i和j,而调用完swap函数而回到main函数后,i和j的生命期已经结束了,不会影响a和b。
(通过反汇编)也就是说,swap函数只是交换了a和b的副本。
可做如下修改即可:
void swap(int *i, int *j)
{
int temp;
temp = *i;
*i = *j;
*j = temp;
}
int main(void)
{
int a = 2, b = 3;
swap(&a, &b);
printf("a = %d, b = %d/n",a b);
return 0;
}
用变量a和b的首地址传参,用指针变量接受参数,改变的就是a和b地址存放的内容,即a与b的值在swap函数体内实现交换。