C 知识量:16 - 74 - 317
一元&运算符用于给出变量的存储地址,例如:如果number是变量,&number就是变量的地址。可以将地址看作是变量在内存中的位置。
在scanf()函数中就使用地址作为参数。一般情况下,如果主调函数不使用被调用函数return语句返回的值来修改自身变量的值,则必须通过地址才能修改主调函数中的值。
示例:&运算符的使用。
#include <stdio.h> int main(void) { int number; printf("Please enter an integer (q to quit):\n"); while (scanf("%d", &number) == 1) { printf("The number is %d,and &number is %p.\n", number, &number); printf("Please enter an integer (q to quit):\n"); } printf("Done.\n"); system("pause"); return 0; }
运行结果为:
Please enter an integer (q to quit): 6 The number is 6,and &number is 0061ff2c. Please enter an integer (q to quit): 12 The number is 12,and &number is 0061ff2c. Please enter an integer (q to quit): 365 The number is 365,and &number is 0061ff2c. Please enter an integer (q to quit): q Done.
以上代码中,%p是输出地址的转换说明。
有时需要在一个函数中更改其他函数的变量,比如在调用函数中修改main()函数的变量值。以下是一个示例:交换变量x和y的值,基本的思路是:
temp = x; x = y; y = temp;
思路的逻辑是正确的,但是如果不借助其他方法,是很难在一个被调函数中,修改主调函数中的变量的。
#include <stdio.h> void change(int, int);//函数原型 int main(void) { int x = 30; int y = 100; printf("First,x=%d and y=%d\n", x, y); change(x, y);//调用函数 printf("In function main,after change,x=%d and y=%d\n", x, y); printf("Done.\n"); system("pause"); return 0; } //函数定义 void change(int x, int y) { int temp; temp = x; x = y; y = temp; printf("In function change,after change,x=%d and y=%d\n", x, y); }
运行结果为:
First,x=30 and y=100 In function change,after change,x=100 and y=30 In function main,after change,x=30 and y=100 Done.
由上述结果可见,虽然在调用函数中成功的完成了变量值的交换,但是main()函数中的变量值却没变,因为,main()与change()中的变量x和y根本就不是同一个变量。而如果使用return语句可以返回单个变量来修改main()函数中x或y的值,但没法同时修改它们两个,如果要实现这个目标,就需要使用指针,即直接使用变量的地址来修改变量。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6