目录

引入

一、指针变量的定义

二、指针变量的赋值

三、指针变量的引用

总结


引入

C语言中可以通过变量名来引用变量的内存单元值。

例如,下面定义了两个变量。

int a, b;
那么a=2;表示将a的内存单元赋值成2,而b=a;则表示将a的内存单元的值复制到 b的内存单元中。
通过变量名来引用变量的内存单元值的方法被称为直接引用。

而通过内存地址引用内存单元值的方法称为间接引用。

如果将内存比喻成教学楼,内存单元对应教学楼的教室,假设张明老师在 9202 教室上课。这时,有人找张明老师,有两种叫法,一种是直接叫张明老师的名字,另一种是可以叫成“9202 教室的老师”。直接叫张明老师,可以认为是直接引用,“9202 教室的老师”则是间接引用。

一、指针变量的定义

指针变量的定义格式为:

【储存类型】    数据类型符   *变量名;

定义格式说明如下:
1)存储类型是指指针变量本身身的存储类型。
2)数据类型符可以是任何一和中有效的数据类型标识符,是指针变量所指向的内存单元的数据类型。
3)   *   号表明后面的变量是指销针变量。变量名必须是合法的标识行符。
例如

//单个指针变量的定义
int *p1;//表示p1是一个指针变量,他的值是某个整型变量的地址。或者说p1指向一个整型变量的地址。
float *p3,a;
或
float a,*p3;
//定义了一个指向浮点型变量的指针变量p3和浮点型变量a。
int *p4,*p5,*p6;
//同时定义三个指向整型的三个指针

二、指针变量的赋值

指针变量同普通变量一样,使用之前不仅要定义说明目,而且必须赋予具体的值。

未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。

指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。

在C语言中,变量的地址是由编译系统分配的,但用户并不知道变量的具体地址。

C语言中提供了地址运算符 &来表示变量的地址。

其一般形式为:& 变量名,如 &a表示变量a的地址,& b 表示变量b的地址。

变量本身必须预先说明。

设有指向整型变量的指针变量p,如要把整整型变量a的地址赋予p,可以有以下两种方式。

int a;
int *p=&a;//指针变量初始化int a;
int *p;
p=&a;//赋值语句的方法int a=20;
int *p,*q;
p=&a;
q=p;//其作用就是先定义一个整型变量指针a和指针p然后把a的地址赋给指针p,然后再把p所指示的地址付给q。

应该注意的是,原则上一个指针变量只能指向同类型的变量,如上面的指针变量p和q只能指向整型变量,不能时而指向一个整型变量,时而指向一个字符型变量。当然,如果给指赋值时,一号右边的指针类型与左边的指针类型不同,则需要进行强制类型转换。例如

int a;int *pi;char *pc;
pi=&a; //pi 指向 a
pc=(char *)pi; //pc也指向了a,即pi和pc 的值都是a的地址
虽然pi和pc都指向了变量a,但它们引用变量a所对应的内存单元的值时是不相同的,通过pc只能访问a的字节单元,而pi则可访问a的整个内存单元。

三、指针变量的引用

"当一个指针指向一个变量时,程序就可以利用这个指针间接引用这个变量。间接引用
的格式是:
*指针变量。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型,而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。例如

int a;
int *p=&a; //p 指向 a
*p=10; //相当于 a=10;
//上面的程序中,由于定义的指针p指向了整型变量a,这时*p就是a,而p是a的地址。*p是变量a的间接引用。

又如,下面的程序:

int a,*p; p=&a;*p=10; a十+;
printf("a=%d,*p=%d",a,*p);
输出是:
a=11,*p=11

程序中*是间接引用运算符,是单目运算符,优先级与++、-的优先级相同,具有右结合性。与a++等价的表达式是(*p)++,而不是*p++。因为*p++相当于*(p++),其中的++是作用于p的,而不是作用于*p。

总结

1):指针变量的定义和引用的重点强调
 2)指针变量必须先定义,后赋值,最后才能使用!没有赋值的指针变量是没有任何意
       义的,也绝对是不允许使用的。
3)指针变量原则上只能指向定义时所规定类型的变量。
4) 指针变量也是变量,在内存中也要占用一定的内在存单元,但所有类型的指针变量都
占用同样大小的内存单元,如在 VC和CB下均为14字节。

指针变量的定义和引用相关推荐

  1. C语言:指针变量的定义与引用

    一.指针变量的定义和赋值 1.格式:类型名    *指针变量名: 2.举例 int     *p1;       char  *s1, *s2;       float  *a1, *a2,  f; ...

  2. 指针变量的定义与引用

    2019独角兽企业重金招聘Python工程师标准>>> void main() {     int a =5,b=3;     int *p;     p = &a;     ...

  3. 指针变量和引用变量的区别_指针Ⅰ--变量的定义

    一.变量的地址 计算机中,数据存储在内存中.内存可划分为若干存储单元,每个单元可以存放8位二进制数,即1个字节.内存单元采用线性地址编码,每个单元具有唯一一个地址编码 1.变量的地址:系统为变量分配的 ...

  4. c语言的指针和java_C语言指针变量的定义和使用(精华)

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量. 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样的一份数据可以是 ...

  5. C语言指针变量的定义和使用

    指针变量的含义 数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量. 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样 ...

  6. 结构体指针变量的定义

    最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用. 1.结构体类型定义 定义方式1: Typedef struct LNode {int da ...

  7. 指针变量的定义和使用

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量. 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样的一份数据可以是 ...

  8. 【C语言】指针变量的定义、使用及初始化

    一.指针变量的定义及使用 1.指针变量的定义 指针变量就是存储指针的变量,而变量的指针指的是变量的存储地址 int *a; char *b; float *c /* 分别定义了整型.字符型.浮点型的指 ...

  9. (四) Shell脚本简介,变量的定义、引用、删除,常见状态和运算符,命令,软件的安装和维护(RPM),软件的安装和维护(yum)

    1,课程回顾 2,本章重点 shell 脚本 软件管理(rpm yum) 3,具体内容 3.1 Shell脚本简介 3.1.1 什么是shell脚本 1.当命令不在命令行中执行,而是从一个文件中执行时 ...

最新文章

  1. 2022-2028年中国医疗+养老产业深度调研及投资前景预测报告
  2. MVC模式和Maven项目构建
  3. excel执行INSERT和UPDATE操作语句
  4. lduan Exchange 2013 公共文件夹(十)
  5. JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程
  6. GitForWindows工具集(GitBash命令行)
  7. PL/Sql快速执行 insert语句的.sql文件
  8. 又一腾讯应用将停运!企业QQ将于2022年1月31日关闭
  9. python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...
  10. HDU2563 统计问题【递推+打表】
  11. java案例代码4-数组的复制
  12. linux用户名不在sudoers,如何修复“用户名不在sudoers文件中。这个事件将报告“在Ubuntu...
  13. 区分BPSK、QPSK、8PSK和区分8QAM、16QAM、32QAM、64QAM
  14. 反射机制,类的加载机制,和注解的配置参数的结合使用详解
  15. 免费的video解析接口
  16. android SharePreference缓存存储List<Bean>
  17. c字打头的语言英语单词,C字开头的励志的英文单词要C字开头的~例如Champion,Confidence,...-c英语开头名词-英语-柯拿拷同学...
  18. ardupilot避障代码分析
  19. 股指期货交易流程(股指期货交易规则详解)
  20. 第七章第三十一题(合并两个有序列表)(Merge two ordered tables)

热门文章

  1. 灵魂拷问!Mysql和Redis数据同步该怎么做?请查收
  2. sklearn中的线性回归
  3. C#泛型List 的定义、作用、用法
  4. 后端接口并行调用方案
  5. python控制modem的at指令_MODEM AT指令集
  6. React新生命周期--getDerivedStateFromProps、getSnapshotBeforeUpdate
  7. python使用二分查找法查找某个数是否在列表内
  8. 四、ADC模数转换概述
  9. 中科蓝讯AB536X系列芯片PWM使用说明
  10. python基础:4.请至少列举5个 PEP8 规范(越多越好)。