指针与函数
指针大大扩展了功能的可能性。我们不再局限于返回一个值。使用指针参数,你的函数可以更改实际数据,而不是数据副本。
要更改变量的实际值,调用语句将地址传递给函数中的指针参数。
例如,以下程序交换两个值:
void swap (int *num1, int *num2);
int main() {
int x = 25;
int y = 100;
printf("x is %d, y is %d\n", x, y);
swap(&x, &y);
printf("x is %d, y is %d\n", x, y);
return 0;
}
void swap (int *num1, int *num2) {
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
程序交换变量的实际值,因为函数使用指针按地址访问它们。
【单选题】该代码的输出是什么?
#include <stdio.h>
void test(int * x) {
*x += *x/2;
}
int main() {
int v = 8;
test(&v);
printf("%d", v);
}
8
4
6
12
补充:
如何使用指针?
使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。下面的实例涉及到了这些操作:
#include <stdio.h>
int main ()
{
int var = 20; /* 实际变量的声明 */
int *ip; /* 指针变量的声明 */
ip = &var; /* 在指针变量中存储 var 的地址 */
printf("Address of var variable: %x\n", &var );
/* 在指针变量中存储的地址 */
printf("Address stored in ip variable: %x\n", ip );
/* 使用指针访问值 */
printf("Value of *ip variable: %d\n", *ip );
return 0;
}