指针指包含地址

声明指针:

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来赋值了,但不能重新赋值指向其他地址

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

C语言指针入门的更多相关文章

  1. C语言指针入门知识

    C语言指针往往是C语言学习过程中最困难的地方, 最近重新理解了一下C语言的指针知识, 在此整理一下, 如果有错误请留言指正. 对于刚入门的人来说, 指针涉及方方面面, 从简单的数组到结构体, 都会用到 ...

  2. C语言入门---第九章 C语言指针

    没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...

  3. c语言快速入门3

    如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 c语言快速入门2 3.4.1 字符和字符串 字符:'' 单个  ...

  4. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  5. C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  6. C语言高速入门系列(八)

    C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...

  7. C语言高速入门系列(五)

    C语言高速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C ...

  8. Swift语言高速入门

    Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  9. go语言快速入门教程

    go快速入门指南 by 小强,2019-06-13 go语言是目前非常火热的语言,广泛应用于服务器端,云计算,kubernetes容器编排等领域.它是一种开源的编译型程序设计语言,支持并发.垃圾回收机 ...

随机推荐

  1. 用flask Flask-RESTful,实现RESTful API

    简介: 自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨 ...

  2. MATLAB 图片折腾4

    重新安排矩阵的x,y,z , 在二维中就相当于把x,y 对换,在三维中相当于可以把三个坐标的位置互换. 比如A = A(:,:,1)=repmat(1,3,3);A(:,:,2)=repmat(2,3 ...

  3. 五. Python基础(5)--语法

    五. Python基础(5)--语法 1 ● break结束的是它所在的循环体, continue是让它所在的循环体继续循环 # 打印: 1 10 2 10 3 10 4 10 5 10 6 10 7 ...

  4. [leetcode整理]

    =======简单 leetcode164 Maximum Gap sort两次 =======有参考 330 Patching Array 98 Validate Binary Search Tre ...

  5. 201621123001 《Java程序设计》第7周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 掌握了NetBeans基本使用方法 掌握布局管理器基本概念 尝试了自己在界面布置组件 网格组布 ...

  6. MVC4实现批量更新数据

    Html: @using (Html.BeginForm("Edit", "Home")) { <div> <input type=" ...

  7. Flask源码阅读-第一篇(flask包下的__main__.py)

    源码: # -*- coding: utf-8 -*-""" flask.__main__ ~~~~~~~~~~~~~~ Alias for flask.run for ...

  8. MAVEN 阿里云中央仓库

    <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexu ...

  9. vue学习--自定义全局vue组件

    文档目录: |--components |-loading(组件文件夹) |-loading.vue (loading组件核心) |-index.js //配置导出组件,并且install 主要配置到 ...

  10. python day 16作业

    day18天作业及默写1,完成下列功能: 1.1创建一个人类Person,再类中创建3个静态变量(静态字段) animal = '高级动物' soup = '有灵魂' language = '语言' ...