@Chiang
2020-05-17T04:08:14.000000Z
字数 1027
阅读 745
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
