《C和指针》阅读笔记-指针

本文深入探讨了C语言中指针的基本概念与使用方法,包括指针变量的声明与初始化、NULL指针的概念及其用途、指针算术运算的规则与限制等内容。文章通过实例解释了如何正确使用指针进行数据操作,以及不当使用指针可能引发的问题。
摘要由CSDN通过智能技术生成

《C和指针》阅读笔记-指针

       无论是程序员还是计算机都无法通过值的位模式来判断它的类型。类型是通过值得使用方法隐式确定的。编译器能够保证值的声明和值的使用之间的关系时适当的,从而帮助我们确定值的类型。
声明一个指针变量并不会自动分配任何内存。在对指针间接访问前,指针必须进行初始化:使它指向现有的内存,或者它分配动态内存。对未初始化的指针变量间接访问操作是非法的,而且这种错误常常难以检测。其结果常常是一个不相关的值被修改。这种错误是很难被调试发现的。
NULL指针就是不指向任何东西的指针。它可以赋值给一个指针,用于表示那个指针并不指向任何值。对NULL指针执行间接访问操作的后果因编译器而异,两个常见的后果就是分别返回内存位置为零的值以及终止程序。除了NULL指针之外,再也没有任何内建的记法来表示指针常量,因为程序员通常无法预测编译器会把变量放在内存中的什么位置。在极少见的情况下,我们偶尔需要使用指针常量,这时我们可以通过把一个整型值强制转化为指针类型来创建它。
eg:*(int *) 100 = 25;
       在指针上可以执行一些有限的算术运算符。你可以把整型值加到一个指针,也可以从一个指针减去一个整型值。在这种情况下,这个整型值会进行调整,原值将乘以指针目标类型的长度。这样,对一个指针加1将使它指向下一个变量,至于该变量在内存中占几个字节与此无关。然后,指针运算只有作用于数组中其结果才是可以预测的。对任何并非指向数组元素的指针执行算术运算(但常常很难被检测到)。如果一个指针减去一个整数后,运算结果产生的指针所指向的位置在数字第一个元素前,那么它是非法的。加法运算稍有不同,如果结果指针指向数组最后一个元素后面的那个内存位置仍是合法(但不能对这个指针执行间接访问操作),不过再往后就不合法了。如果两个指针都指向同一个数组中的元素,那么它们可以相减。指针减法的结果经过调整(除以数组元素类型的长度),表示两个指针在数组中相隔多少个元素。如果两个指针并不是指向同一个数组的元素,那么它们之间进行相减就是错误的。任何指针之间都可以进行比较,测试它们是否相等。如果两个指针都指向同一个数组中的元素,那么它们之间还可以执行<,<=,>和>=等关系运算,用于判断它们在数组中的相对位置。
eg:
inti[10];
int*p = &i[0];
intoffset = 3;
p += offset;(a)
p += 3;(b)
b的效率更高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值