C语言指针入门
指针指包含地址
声明指针:
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=#
(pi=&a;(合法))
*pi=5;(报错)
const 可以把变量定义为常量,可以再赋值其他地址,但不能通过解引pi来修改num的值
指向非常量的常量指针
int num,a;
const int bp=500;
int *const cpi=#(区分上面的int const *pci)
int *const p=&bp;(会有警告,因为常量是不可以修改的)
*cpi=100;(合法)
cpi=&a;(报错)
那么现在我们可以使用*cpi=25来赋值了,但不能重新赋值指向其他地址
还有指向常量的常量指针,以及指向‘指向常量的常量指针’的指针,因为不是经常用到,在这里不做介绍。
C语言指针入门的更多相关文章
- C语言指针入门知识
C语言指针往往是C语言学习过程中最困难的地方, 最近重新理解了一下C语言的指针知识, 在此整理一下, 如果有错误请留言指正. 对于刚入门的人来说, 指针涉及方方面面, 从简单的数组到结构体, 都会用到 ...
- C语言入门---第九章 C语言指针
没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...
- c语言快速入门3
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 c语言快速入门2 3.4.1 字符和字符串 字符:'' 单个 ...
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- C语言高速入门系列(八)
C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...
- C语言高速入门系列(五)
C语言高速入门系列(五) C语言指针初涉 ------转载请注明出处:coder-pig 本节引言: 上一节我们对C ...
- Swift语言高速入门
Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- go语言快速入门教程
go快速入门指南 by 小强,2019-06-13 go语言是目前非常火热的语言,广泛应用于服务器端,云计算,kubernetes容器编排等领域.它是一种开源的编译型程序设计语言,支持并发.垃圾回收机 ...
随机推荐
- 用flask Flask-RESTful,实现RESTful API
简介: 自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨 ...
- MATLAB 图片折腾4
重新安排矩阵的x,y,z , 在二维中就相当于把x,y 对换,在三维中相当于可以把三个坐标的位置互换. 比如A = A(:,:,1)=repmat(1,3,3);A(:,:,2)=repmat(2,3 ...
- 五. Python基础(5)--语法
五. Python基础(5)--语法 1 ● break结束的是它所在的循环体, continue是让它所在的循环体继续循环 # 打印: 1 10 2 10 3 10 4 10 5 10 6 10 7 ...
- [leetcode整理]
=======简单 leetcode164 Maximum Gap sort两次 =======有参考 330 Patching Array 98 Validate Binary Search Tre ...
- 201621123001 《Java程序设计》第7周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 掌握了NetBeans基本使用方法 掌握布局管理器基本概念 尝试了自己在界面布置组件 网格组布 ...
- MVC4实现批量更新数据
Html: @using (Html.BeginForm("Edit", "Home")) { <div> <input type=" ...
- Flask源码阅读-第一篇(flask包下的__main__.py)
源码: # -*- coding: utf-8 -*-""" flask.__main__ ~~~~~~~~~~~~~~ Alias for flask.run for ...
- MAVEN 阿里云中央仓库
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexu ...
- vue学习--自定义全局vue组件
文档目录: |--components |-loading(组件文件夹) |-loading.vue (loading组件核心) |-index.js //配置导出组件,并且install 主要配置到 ...
- python day 16作业
day18天作业及默写1,完成下列功能: 1.1创建一个人类Person,再类中创建3个静态变量(静态字段) animal = '高级动物' soup = '有灵魂' language = '语言' ...