【发布时间】:2015-10-18 07:19:30
【问题描述】:
请准确解释为什么我在非数组变量上使用指针,例如int 我知道指针变量存储指定变量的地址但是为什么我们只需要单个变量的地址,什么是这样做有什么好处?
int a = 10;
int *ptr_a = &a;
谢谢!
【问题讨论】:
-
询问代码作者。问题中的代码毫无意义。有上下文吗?
请准确解释为什么我在非数组变量上使用指针,例如int 我知道指针变量存储指定变量的地址但是为什么我们只需要单个变量的地址,什么是这样做有什么好处?
int a = 10;
int *ptr_a = &a;
谢谢!
【问题讨论】:
虽然我猜你正在查看的代码应该会给你一个答案......这样做的典型原因是为了将它传递给一个应该能够修改这个变量的函数。
如果您只是调用foo(a),函数foo() 将接收变量的值 作为参数,因此它有自己的副本。指针也会发生同样的事情,但指针当然仍会指向您的原始变量,因此该函数可以通过取消引用指针来修改它 (*a = 42;)。
【讨论】:
通过指针实现引用调用机制 请在 sn-p 下面通过删除指针进行编译并注意输出。
#include <stdio.h>
void swap(int *a,int *b);
int main(){
int num1=5,num2=10;
swap(&num1,&num2); /* address of num1 and num2 is passed to swap function */
printf("Number1 = %d\n",num1);
printf("Number2 = %d",num2);
return 0;
}
void swap(int *a,int *b){ /* pointer a and b points to address of num1 and num2 respectively */
int temp;
temp=*a;
*a=*b;
*b=temp;
}
解释:
内存位置num1 and num2 的地址被传递给函数,指针*a and *b 接受这些值。因此,指针 a 和 b 分别指向 num1 和 num2 的地址。当指针的值改变时,内存位置的值也相应改变。因此,对*a and *b 所做的更改反映在主函数中的num1 and num2 中。
这种技术在 C 编程中称为引用调用。
【讨论】: