C语言之指针用法总结

C语言指针概述:
1.计算机系统中,无论是存入或是取出数据都需要与内存单元
打交道,物理器件通过地址编码寻找内存单元。
2.地址编码是一种数据,C语言的指针类型正是为了表示这种
计算机所特有的地址数据。
3.存取内存单元是任何程序经常性的操作,前面按对象(或变量)
名称直接访问内存单元。
4.程序运行时申请到的内存空间只有地址没有名称,因此指针
成为访问动态内存的唯一工具。

地址和指针的概念:
1.程序中的数据对象总是存放在内存中,在生命期内这些对象
占据一定的存储空间,有确定的存储位置。
2.C语言将内存单元抽象为对象,就可以按名称来使用对象。
3.定义数据对象时,需要说明对象名称和数据类型。
4.数据类型的作用是告诉编译器要为对象分配多大的存储空间(单位为字节),
以及对象中要存储什么类型的值。
5.对象名称的作用是对应分配到的内存单元,允许按名称来访问。

定义变量后,程序可以在变量中存储值和取出值。

C语言之指针用法总结

1.数据值100存储到i对应的内存单元,表达式i+ 100的值
存储到j对应的内存单元。
2.按对象名称存取对象的方式称为对象直接访问。
3.在容量可观的存储空间中,计算机硬件实际上是通过地址编
码而非名称来寻找内存单元的。
4.地址编码通常按无符号整型数据处理(没有负数),每个内
存单元都有一个地址,以字节为单位连续编码。
5.编译器将程序中的对象名转换成机器指令能识别的地址,
通过地址来存取对象值。

由于通过地址能寻找到对象的内存单元,因此C语言形象地把
地址称为”指针”,即一个对象的地址称为该对象的指针。网址:yii666.com<

通过对象地址存取对象的方式称为指针间接访问。

C语言指针变量:

C语言将专门用来存放对象地址(即指针)的变量称为指针变量,
其数据类型为指针类型,定义形式:指针类型 *指针变量名,...

C语言之指针用法总结

通过指针变量,可以间接访问(或间接存取)对象。网址:yii666.com

区分指针和指针变量:
指针是地址值,指针变量是存储指针的变量,
例如可以说变量i的指针是4000,而不能说变量i的指针变量是4000;
可以说指针变量p的值是4000,p既可以存储变量i的指针,
又可以存储变量j的指针。

特殊的指针类型void*:

C语言之指针用法总结

获取对象的地址:通过取地址运算(&)获取对象的地址。

C语言之指针用法总结

取地址运算得到的指针不仅值为对象的地址,而且还以对象

的数据类型作为指向类型,例如:

C语言之指针用法总结

指针的间接访问:

通过间接引用运算(*)可以访问指针所指向的对象或内存单元。

C语言之指针用法总结

间接引用(又称解引用)运算符在所有运算符中优先级较高,

其运算结果是一个左值,即expr所指向 的对象或内存单元;
expr必须是指针的含义,可以为地址常量、指针变量、指针运算表达式。

C语言之指针用法总结

 指针变量的初始化与赋值:

取变量地址一定发生在该变量定义之后(这时才有地址) ,
否则是错误的。例如:

C语言之指针用法总结

指针变量初始化时,地址初值必须是与指针变量同一指向类型
的地址值,例如:

C语言之指针用法总结文章来源地址https://www.yii666.com/article/754120.html

指针变量可以进行赋值运算:文章地址https://www.yii666.com/article/754120.html

C语言之指针用法总结

指针变量赋值时要求左值和右值必须是相同的指向类型,
C语言不会对不同指向类型的指针作隐式类型转换。例如:

C语言之指针用法总结

指针的算术运算:
包括指针加减整数运算,指针变量自增自减运算,两个指针相减运算。
1.指针加减整数运算:
设p是一个指针(常量或变量),n是一个整型(常量或变量),
则p+n的结果是一个指针,指向p所指向对象的后面的第n个对象;
而p-n的结果是一个指针,指向p所指向对象的前面的第n个对象。

C语言之指针用法总结

2.指针变量自增自减运算:
设p是一个指针变量,其自增自减运算包括p++、 ++p、p--、--p形式。

C语言之指针用法总结

C语言之指针用法总结

C语言之指针用法总结

3.两个指针相减运算:
设p1、p2是同一个指向类型的两个指针(常量或变量),
则p2-p1的结果为两个指针之间对象的个数,如果p2的地址值
大于p1结果为正,否则为负。

指针的关系运算:
设p1、p2是同一个指向类型的两个指针(常量或变量),
则p2和p1可以进行关系运算,用于比较这两个地址的位置关系。

C语言之指针用法总结

指针的类型转换:
设p是一个指针(常量、变量或表达式),可以对p进行显式类型转换,
一 般形式为:(转换类型* )p
对指针进行显式类型转换的结果是产生一个临时指针对象,
其指向类型为"转换类型",地址值与p的地址值相同,
但p的指向类型和地址值都不变。

指针的赋值运算:
指针可以进行赋值运算,前提是赋值运算符两边的操作数必须
是相同指向类型。例如:

C语言之指针用法总结

C语言之指针用法总结

void*指针可以做关系运算,表示两个指针的地址值比较。
void*指针可以指向其他任何类型,无需类型转换。
假定指针是有效的,可以将void* 指针显式类型转换为其他类型,
再使用间接引用。例如:

C语言之指针用法总结

指针的const限定:
const限定符作用在指针类型有两种含义:
指向const对象的指针和const指针。

1.指向const对象的指针:
一个指针变量可以指向只读型对象,称为指向const对象的指针,
定义形式为:const 指向类型 *指针变量,.......;
即在指针变量定义前加const限定符,其含义是指针指向的对象是只读的,
即不允许通过指针来改变所指向的const对象的值。

例如const int *p;
这里p是一个指向const的int类型对象的指针,const限定
p指针所指向的对象类型,而并非p本身。
也就是说,p本身并不是只读的,在定义时不需要对它进行初始化。
可以给p重新赋值,使其指向另一个const对象。
但不能通过p修改其所指对象的值。

把一个const对象的地址赋给一个非const对象的指针变量是错误的。

C语言之指针用法总结

C语言之指针用法总结

C语言之指针用法总结

C语言之指针用法总结

如果指向const的指针所指的对象并非const,则可直接给该对象赋值
或间接地利用非const指针修改其值,毕竟这个值不是const的。重要的是要记住:
不能保证指向const的指针所指对象的值一定不被其他方式修改。

const指针:
一个指针变量可以是只读的,称为const指针, 定义形式为:
指向类型 *const指针变量,.......;

C语言之指针用法总结文章来源地址:https://www.yii666.com/article/754120.html

C语言之指针用法总结

指向const对象的const指针:
可以定义指向const对象的const指针,形式为:
const 指向类型 * const 指针变量,......

C语言之指针用法总结

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

C语言之指针用法总结-相关文章

  1. C语言之指针用法总结

  2. C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

  3. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

  4. (四)C语言柔性数组、指针赋值

  5. C语言速度优化之指针赋值与if推断

  6. 由链表初始化看C语言的二级指针

  7. c语言之函数指针

    一、基础研究这里研究的内容是函数指针,需要我们在研究后构造程序来描述函数指针数组的用法和向函数传函数指针的方法。指针有很多种:整型指针、结构体指针、数组指针等等,它们的本质是它们的值都是一个地址,只不过整形指针的值是一个int型数据的地址,结构体

  8. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题。那么就总结一下C语言中结构体赋值的问题吧:结构体直接赋值的实现下面是

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png