博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言指针入门
阅读量:6358 次
发布时间:2019-06-23

本文共 1308 字,大约阅读时间需要 4 分钟。

指针指包含地址

声明指针:

int num;声明整数

int *num;声明指针,下面的声明也是等价的,空格的使用指示个人爱好

int* num;

int  *  num;

int  *num;

int*num;

阅读声明:

const int *pci;  倒过来读比较好看,pci是个指针变量,pci是个int型指针变量,pci是个指向整数常亮的指针变量

地址操作符&会返回操作数的地址,可用来初始化指针pi

num=0;

pi=#

也可以像下面这样赋值

int num;

int *pi=#(也可以把这句改为int *pi;  pi=&num)

num=100;(或者*pi=100)

printf("%d\n",*p);(间接引用操作符*返回指针变量指向的值,一般称为解引指针)

那么现在打印的值也是100

printf格式说明

%x  显示十六进制数

%o  显示八进制数

%p  也是显示十六进制数(通常是大写十六进制字母的,%x是小写)

指向函数的指针

void (*foo)();

该函数没有参数也无返回值,指针的名字叫foo

null被赋值给指针,意味着指针不知想任何东西,没有指向任何内存区域,两个null指针总是想等的。另外,未初始化的指针和初始化的指针是不同,为初始化的指针可能包含任何值,而初始化为null的指针不会引用内存中的任何地址。有趣的是,我们可以给指针赋值为0,但是不能赋值为其他数,赋值为其他数会报错。如果指针被赋值为null值,那么就会被解释为二进制0.

指针算术运算

给指针加上整数:实际上是加的数是这个整数和指针数据类型对应字节数的乘积

给指针减去整数:实际上是减的数是这个整数和指针数据类型对应字节数的乘积

指针相减:一个指针减去另一个指针会得到两个地址的差值,可以用来判断数组中的元素顺序。还可以比较指针,使用><=符号进行比较,会返回0或1,从而判断数组的相对顺序。

常量与指针

指向常量的指针(可以将指针定义为指向常量,这意味着不能通过指针修改它所引用的值)

例如:

int num=5,a;

const int *pi;(也可以写成int const *pi,这两种写法是等价的,指针pi会认为自己指向的是整数常量,所以不允许用指针修改这个常量)

pi=&num;

(pi=&a;(合法))

*pi=5;(报错)

const 可以把变量定义为常量,可以再赋值其他地址,但不能通过解引pi来修改num的值

指向非常量的常量指针

int  num,a;

const int bp=500;

int *const cpi=&num;(区分上面的int const *pci

int *const p=&bp;(会有警告,因为常量是不可以修改的)

*cpi=100;(合法)

cpi=&a;(报错)

那么现在我们可以使用*cpi=25来赋值了,但不能重新赋值指向其他地址

还有指向常量的常量指针,以及指向‘指向常量的常量指针’的指针,因为不是经常用到,在这里不做介绍。

转载于:https://www.cnblogs.com/biaopei/p/7730672.html

你可能感兴趣的文章
Overlay network 覆盖网络
查看>>
Linux之编译需要的文件变化时刻
查看>>
IntelliJ IDEA中怎么查看方法说明?
查看>>
mvn常用命令
查看>>
redis zset 顺序问题
查看>>
C# 判断网站是不是discuz论坛
查看>>
236. Lowest Common Ancestor of a Binary Tree
查看>>
Redash本地开发环境搭建
查看>>
你真的懂switch吗?聊聊switch语句中的块级作用域
查看>>
一枚戒指,一场仪式,这件事阿里巴巴坚持了15年
查看>>
2019准备了Java程序员最新招聘标准,阿里、京东等一线互联网企业
查看>>
lodop打印控件的使用
查看>>
跳出弹窗页面禁止滚动(PC端和手机端)
查看>>
云服务器 ECS CentOS 7配置默认防火墙 Firewall
查看>>
flatpak 和 snap 是 Linux 上的应用软件打包方式
查看>>
Java编程基础31——MySql数据库
查看>>
Linux的一下常用命令详解
查看>>
bootstrap datetimepicker日期插件美化
查看>>
使用 git 克隆 github 上的项目失败
查看>>
LeetCode 108——将有序数组转化为二叉搜索树
查看>>