[关闭]
@Chiang 2020-05-17T12:08:14.000000Z 字数 1027 阅读 493

指针

C语言 2020-05


变量的名称地址的关系

  • 编写程序时,可以认为变量有两个属性: 名称(还有其他性质、如类型,暂不讨论).
  • 计算机编译和加载程序后,认为变量也有两个属性: 地址.地址就是变量在计算机内部的名称.
  • 可以通过&运算符访问地址,通过*运算符获得地址上的值.
  • 普通变量把值作为基本量,把地址作为通过&运算符获得的派生量
  • 指针变量把地址作为基本量,把值作为通过*运算符获得的派生量

指针的定义

指针是一个值为内存地址的变量(或数据对象).指针变量的值是地址.

与指针相关的运算符

地址运算符: &

  • 后跟一个变量名时,&给出该变量的地址.
  • &nurse表示变量nurse的地址.

间接运算符/解引用运算符: *

  • 后跟一个指针名或地址时,*给出储存在指针指向地址上的值.
  1. nurse = 22;
  2. ptr = &nurse; //指向nurse的指针
  3. val = *ptr; //把ptr指向的地址上的值赋给val
  4. 目的是把22赋给val

申明指针

  • 声明指针变量时必须指定指针所指向变量的类型
  • 不同的变量类型占用不同的存储空间,一些指针操作要求知道操作对象的大小.
  • 程序必须知道储存在指定地址上的数据类型.
  • longfloat可能占用相同的存储空间,但是他们储存数字却大相径庭.

申明示例:

  1. int * pi; // pi是指向int类型变量的指针
  2. char * pc; // pc是指向char类型变量的指针
  3. float * pf, * pg; // pfpg都是指向float类型变量的指针
  • 类型说明符表明了指针所指向对象的类型
  • 星号(*)表明声明的变量是一个指针
  • int * pi;声明的意思是pi是一个指针,*piint类型
  • *和指针名之间的空格可有可无.通常,程序员在声明时使用空格,在解引用变量时省略空格.

指针

使用指针在函数间通信

  1. #include <stdio.h>
  2. void interchange(int * u, int * v);
  3. int main(void)
  4. {
  5. int x = 5, y = 10;
  6. printf("Originally x = %d and y = %d.\n", x, y);
  7. interchange(&x, &y); //把地址发送给函数
  8. return 0;
  9. }
  10. void interchange(int * u, int * v)
  11. {
  12. int temp;
  13. temp = *u; //temp获得u所指向对象的值
  14. *u = *v;
  15. *v = temp;
  16. }

参考资料:
C Primer Plus

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注