【C语言入门教程】4.5 指针变量的定义与引用
指针变量是包含内存地址的变量。一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址。普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值。指针变量在使用前需要声明与初始化。
4.5.1 指针变量的定义
指针变量定义时,需要指定所指向的数据类型。声明指针变量的一般形式为:
数据类型 *变量名
“*”运算符通常称为 间接运算符 或 间接引用运算符,在声明中以这种方式使用间接运行符时,它用以表明被声明的变量是指针变量。如下例所示:
int *pi; // 声明一个整形指针变量
char *pc; // 声明一个字符型指针变量
float *pf; // 声明一个单精度浮点型指针变量
声明为整形的指针变量 *pi 只能指向整形变量或者整形变量数组元素。声明为字符型的指针变量则只能指向字符型数据。指针变量声明后,才可以写入指向某种数据类型的变量的地址,或者说是为指针变量初始化。如下例所示:
int *pi, i = 290; // 声明整形指针变量 *pi 和 整形变量 i,并为 i 赋初始值
char *pc, c = 65; // 声明一个字符型指针变量 *pc 和 字符型变量 c,并为 c 赋初值
float *pf, f = 1.414; // 声明一个单精度浮点型的指针变量 *pf 和 单精度浮点型变量 f,并为 f 赋值
pi = &i; // 将整型指针变量 *pi 指向整型变量 i
pc = &c; // 将字符型指针变量 *pc 指向字符型变量 c
pf = &f; // 将单精度浮点型指针变量 *pf 指向单精度浮点型变量 f
上述赋值语句 “pi = &i” 表示将变量 i 的地址赋值给指针变量 pi,此时 pi 就指向了 i。3条赋值语句产生的效果是 pi 指向 i,pc 指向c,pf 指向 f,效果图如下所示。“&”运算符称为 取地址运算符,作用是取得变量的内存地址。
4.5.2 指针变量的引用
利用指针变量可直接改变内存中某一单元的值,这是一种对系统底层的访问。指针变量为复杂的操作带来便利的同时,也存在很大的安全隐患,使用不当时极容易引起程序的终止设置系统死机。利用指针变量间接引用变量的形式为:
*指针变量
间接运算符 在这里的作用是访问指针变量所指向的内存单元的值,如下例所示:
int *pi =, i = 100; // 声明整型指针变量 pi 和 整型变量 i,并为 i 赋初值
pi = &i; // 将整型指针变量 pi 指向整型变量i
*pi++; // 间接访问变量i,使变量 i 的值自增
printf("%d", i); // 输出 i 的值
该程序的输出为 101,因为指针变量 *pi 间接引用变量 i,修改 *pi 的值等同于修改变量 i 的值。如果将代码第 4 行改写为:
printf("%d", *pi); // 输出 *pi 的值
该程序的输出仍然为 101,*pi 与 i 的作用是等同的。很多函数都需要取得变量的地址以修改变量的值,如 scanf() 函数。在上例中如果使用指针变量修改 i 的值,则可以用以下代码实现。
scanf("%d", pi); // 从键盘输入获取数据,保存在变量 i 中
这条语句的作用等同于 scanf("%d", &i),因为指针 pi 的值为变量 i 的地址,所以不能使用间接运算符。
C 语言有 2 个指针的运算符,分别是 取值运算符 和 间接引用运算符,这 2 个运算符都是一元运算符,它们的优先级仅次于一元算术运算符。
【C语言入门教程】4.5 指针变量的定义与引用的更多相关文章
- C语言入门教程-(4)常量和变量
1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...
- 【C语言入门教程】目录/大纲
第一章 C语言编程基础 1.1 基本程序结构 1.2 函数库 和 链接 1.3 C语言“32个”关键字 第二章 数据类型.运算符和表达式 2.1 数据类型(5种基本数据类型),聚合类型与修饰符 2.2 ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
随机推荐
- AngularJs ngCloak、ngController、ngInit、ngModel
ngCloak ngCloak指令是为了防止Angular应用在启动加载的时候html模板将会被短暂性的展示.这个指令可以用来避免由HTML模板显示造成不良的闪烁效果. 格式: ng-cloak ...
- 关于win7上内存占用较大的说明
1 Win7系统较XP系统内存占用高: 由于xp系统属于轻量化的系统,而win7系统是一个重量型的系统,在两者的内存管理机制上有很大的区别,根据业界和微软对外的发布公告中可以看到,win7系 ...
- 常见linux命令释义(第六天)——shell环境变量
太懒了,这几天好像得了懒癌,一点都不想写博客.后来想想,知识嘛,还是分享出来的好.第一治自己的懒癌:第二顺便巩固下自己的知识. Linux的变量分为两种,一种是系统变量,是系统一经启动,就写进内存中的 ...
- Docker探索系列1之docker入门安装与操作
preface docker这种时髦的技术我接触的比较晚,如果不是公司在使用这项技术,估计还得会更晚接触.好了,说下我司现在docker使用的情况.docker在我司是用来跑web服务的,里面的web ...
- Linux 中,如何显示 (gcc)make时实际执行命令
问题: 调试编译问题,如何获取,GCC(或许make)时,实际编译器和链接器正在执行的命令? 解决方法: 方法一:通用方法 使用dry run,如下 $ make -n 这将显示make 命令正在试图 ...
- C中的字符串实例
1.#include <stdio.h>#include <assert.h>size_t strlen(const char* s){ return ( assert( ...
- String类中的一些函数使用方法
最常用的就是Length()函数了,求字符串的长度 String s="";int i=s.length();i结果为0. 如果是String s=null;int i=s.len ...
- Java——URLEncoder和URLDecoder
import java.net.URLDecoder; import java.net.URLEncoder; //========================================== ...
- hasClass addClass removeClass
//函数有class function hasClass(ele,cls){ return -1<(" "+ele.className+" ").inde ...
- 一个 Sql语句优化的问题- STATISTICS 统计信息
前段时间,同事遇到一个 Sql语句的问题,一个列表分页功能响应在30 s以上,看数据库里面的数据条数,数据量也不大,相关字段的一些索引也都有,可就是慢.于是找出具体的sql 语句出来分析,分页功能主要 ...