后跟一个变量名时,&给出该变量的地址。
&nurse //表示变量nurse的地址。
后跟一个指针名或地址时,*给出储存在指针指向地址上的值。
val = *ptr; // 把ptr指向的地址上的值赋给val
声明指针变量时必须指定指针所指向变量的类型,因为不同的变量类型占用不同的存储空间;另外,程序必须知道储存在指定地址上的数据类型。
int * pi; // pi是指向int类型变量的指针 char * pc; // pc是指向char类型变量的指针 float * pf, * pg; // pf、pg都是指向float类型变量的指针
类型说明符表明了指针所指向对象的类型,星号(*)表明声明的变量是一个指针。 第一句的意思是pi是一个指针,*pi是int类型。
pc指向的值(*pc)是char类型。pc本身是什么类型?我们描述它的类型是“指向char类型的指针”。
#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); // 把地址发送给函数 printf("Now x = %d and y = %d.\n", x, y); return 0; } void interchange(int * u, int * v) //通过修改地址上的值来交换变量的值 { int temp; temp = *u; // temp获得 u 所指向对象的值 *u = *v; *v = temp; }
变量:名称、地址和值
编写程序时,可以认为变量有两个属性:名称和值。 计算机编译和加载程序后,认为变量也有两个属性:地址和值。地址就是变量在计算机内部的名称。
普通变量把值作为基本量,把地址作为通过&运算符获得的派生量;而指针变量把地址作为基本量,把值作为通过*运算符获得的派生量。