指针指包含地址

声明指针:

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. Java操作FTP工具类(实例详解)

    这里使用Apache的FTP jar 包 没有使用Java自带的FTPjar包  工具类 package com.zit.ftp; import java.io.File; import java.i ...

  2. GDI中StretchBlt或Blt缩放图片失真问题

    在用Scrollview控件的缩放图片时,严重失真: 解决方法:dc.SetStretchBltMode(COLORONCOLOR). 参考文章:https://blog.csdn.net/m3728 ...

  3. DevExpress WinForms使用教程:图表控件 - 内置深入查询

    [DevExpress WinForms v18.2下载] 在最新发布的DevExpress WinForms v18.2中,DevExpress WinForms和ASP.NET图表控件引入嵌套系列 ...

  4. shell中环境变量

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...

  5. [Paper] LCS: An Efficient Data Eviction Strategy for Spark

    Abstract Classical strategies do not aware of recovery cost, which could cause system performance de ...

  6. L308 New brain cells made throughout life

    People keep making new brain cells throughout their lives (well at least until the age of 97), accor ...

  7. nginx——ngx_http_gzip_module

    文件压缩 Syntax: gzip on | off; Default: gzip off; Context: http, server, location, if in location Synta ...

  8. restful接口设计规范总结

    这篇 文章主要是借鉴他人,但是自己很想总结出一套规范,以供向我这样的新手使用,用来规范代码,如果有什么好的提议,请不吝赐教,本篇文章长期更新! 一.重要概念: REST,即Representation ...

  9. JAVA Clone复制对象

    谈到了对象的克隆,就不得不说为什么要对对象进行克隆.Java中所有的对象都是保存在堆中,而堆是供全局共享的.也就是说,如果同一个Java程序的不同方法,只要能拿到某个对象的引用,引用者就可以随意的修改 ...

  10. 2017常见的50道java基础面试题整理(附答案)

    1.作用域public,private,protected,以及不写时的区别 答: 区别如下: 2.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是 ...