C和指针(3)指针
来源:互联网 发布:平面设计软件下载 编辑:程序博客网 时间:2024/04/18 20:45
第六章
(1)变量与内存位置之间的关联并不是硬件所提供的,它是由编译器来实现的。变量只是提供了一种更为方便的方式来记住地址。其实硬件仍然通过地址来访问内存位置。
(2)NULL指针并未指向任何东西 ,因此,对一个NULL指针进行间接访问操作是非法的。在对指针进行间接访问之前,首先必须确保它并非NULL指针。
(3)间接访问指针既可以作为左值使用又可以作为右值使用。作为左值使用时,表达式指定需要进行修改的位置。当作为右值使用时 ,它就是提取当前存储于这个位置的值。
(4)把整型值转换为指针或把指针转换为整型值是极为罕见的,通常这类转换属于无意识的错误。int *p=&a;p=10-*p;//这条语句是非法的
(5)*100=25;这条语句非法,因为字面值100的类型是整数,而间接访问操作只能作用于指针类型表达式。如果确实想把25存储于位置100,必须使用强制类型转换。
*(int *)100=25;\\强制类型转换把值100从“整型”转换为“指向整型的指针”,这样对它进行间接访问就是合法的。此技巧只用于需要通过地址访问内存中某个特定位 置。
(6)int a=12;
int *b=&a;
int **c=&b;
*操作符具有右结合性,故最后一个表达式相当于*(*c),我们必须从里向外逐层求值。*c访问c所指向的位置,这是变量b。第二个间接访问操作符访问这个位置所指向的地 址,也就是变量a。
(7)char ch='a';
char *cp=&ch;//++cp、cp++这两个表达式的值都不是合法的左值。如果在表达式中增加了间接访问操作符,它们就可以成为合法的左值。
&ch可以当作右值使用,但不能作为左值使用。因为这个表达式并未标识任何机器内存的特定位置,所以它并不是一个合法的左值。
(8)*(cp+1)这里要注意指针加法运算的结果是个右值,因为它的存储位置并未清晰定义。如果没有间接访问操作这个表达式将不是一个合法的左值。 然而,间接访 问跟 随指针访问一个特定的位置。这样,*(cp+1)就可以作为左值使用,尽管cp+1本身并不是左值。
(9)*cp++这里涉及三个步骤:1、++操作符产生cp的一份拷贝。2、然后++操作符自己增加cp的值。3、最后,在cp的拷贝上执行间接访问操作。
(10)指针运算只有作用于数组中其结果才是可以预测的。对任何并非指向数组元素的的指针执行算术运算是非法的。如果一个指针减去一个整数后,运算结果产生的指针指 向的位置在 数组第一个元素之前,这也是非法的。加法运算稍有不同,如果结果指针指向数组最后一个元素后面的那个内存位置(但不能对这个指针执行间接访问操作,因为很可能会失败),不过再往后就不合法了。
- C和指针(3)指针
- c和指针(3)
- 娓娓道来c指针 (3)指针和数组
- 娓娓道来c指针 (3)指针和数组
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- C指针和指针的指针
- 读书笔记之c和指针(3)
- 再读《C和指针》(笔记3)
- 【C和指针】函数指针
- 【C和指针】const指针
- 《c和指针》函数指针
- c和指针详解------指针
- 《c和指针》读书笔记3
- 读书笔记:C和指针3
- c和指针(1)
- c和指针(2)
- 北京大学光华管理学院MBA2015年招生信息
- NESASM教程——第四天——制作、载入调色板
- Java多线程-新特征-信号量Semaphore
- 第12周 项目2-(1)求n组数中的最大公约数
- 《人月神话》读后感
- C和指针(3)指针
- POJ3641 Pseudoprime numbers 【快速幂】
- linux 定时重启 tomcat
- UML--------三大结构
- 北京大学光华管理学院2015年工商管理硕士(MBA)专业学位研究生招生简章
- 网关批处理等检查步骤详解
- 看来科幻电影快成为真的了
- CodeIgniter框架中关于URL重写(index.php)的二三事
- Kinect V2彩色数据用OpenCV显示