@Chiang
2020-05-17T12:08:14.000000Z
字数 1027
阅读 489
C语言
2020-05
名称
、地址
和值
的关系
- 编写程序时,可以认为变量有两个属性:
名称
和值
(还有其他性质、如类型,暂不讨论).- 计算机编译和加载程序后,认为变量也有两个属性:
地址
和值
.地址就是变量在计算机内部的名称.- 可以通过
&
运算符访问地址,通过*
运算符获得地址上的值.- 普通变量把值作为基本量,把地址作为通过
&
运算符获得的派生量- 指针变量把地址作为基本量,把值作为通过
*
运算符获得的派生量
指针
是一个值为内存地址的变量(或数据对象).指针变量的值是地址.
&
- 后跟一个变量名时,
&
给出该变量的地址.&nurse
表示变量nurse
的地址.
*
- 后跟一个指针名或地址时,
*
给出储存在指针指向地址上的值.
nurse = 22;
ptr = &nurse; //指向nurse的指针
val = *ptr; //把ptr指向的地址上的值赋给val
目的是把22赋给val
- 声明指针变量时必须指定指针所指向变量的类型
- 不同的变量类型占用不同的存储空间,一些指针操作要求知道操作对象的大小.
- 程序必须知道储存在指定地址上的数据类型.
long
和float
可能占用相同的存储空间,但是他们储存数字却大相径庭.
申明示例:
int * pi; // pi是指向int类型变量的指针
char * pc; // pc是指向char类型变量的指针
float * pf, * pg; // pf、pg都是指向float类型变量的指针
- 类型说明符表明了指针所指向对象的类型
- 星号(*)表明声明的变量是一个指针
int * pi
;声明的意思是pi
是一个指针,*pi
是int
类型*
和指针名之间的空格可有可无.通常,程序员在声明时使用空格,在解引用变量时省略空格.
#include <stdio.h>
void interchange(int * u, int * v);
int main(void)
{
int x = 5, y = 10;
printf("Originally x = %d and y = %d.\n", x, y);
interchange(&x, &y); //把地址发送给函数
return 0;
}
void interchange(int * u, int * v)
{
int temp;
temp = *u; //temp获得u所指向对象的值
*u = *v;
*v = temp;
}
参考资料:
C Primer Plus