指针变量的内容
变量d和e都被声明为指针,并用其他变量的地址予以初始化。指针的初始化是用&操作符完成的,它用于产生操作室的内存地址。
d和e的内容是地址。
d的内容和a的存储地址一致,e的内容和c的存储地址一致
变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也不例外。
间接访问操作符
通过一个指针访问它所指向的地址的过程成为间接访问(indirection)或解引用(dereferencing the pointer)。这个用于执行间接访问的
操作符是单目操作符*。
d的值是100。当对d使用间接访问操作符时,它表示访问内存位置100并查看那里的值。
因此,*d的右值是112
d是一个指向整型的指针,对它解引用操作将产生一个整型值。类似,对float *进行间接访问将产生一个float型值。
如果不对指针变量进行间接访问操作,它的值只是简单的一些位的集合。当执行间接访问操作时,才发生实际的内存访问。
指针并不存在内建的间接访问属性。必须通过*间接访问操作符。
未初始化和非法的指针
int *a;
*a = 12;
这个声明创建了一个名叫a的指针变量,后面那条赋值语句把12存储到a所指向的位置。
a指向哪里?12这个值存储于什么地方?
对指针进行间接访问之前,必须确保它们已经被初始化。
NULL指针
NULL指针作为一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,可以赋一个零值。
为了测试 一个指针变量是否为NULL,可以将它与零值进行比较。
NULL指针的概念是非常有用的,因为给了你一种方法,表示某个特定的指针目前并未指向任何东西。例如,一个用于在某个数组中查找某个特定值的
函数可能返回一个指向查找到的数组元素的指针。如果该数组不包括指定条件的值,函数就返回一个NULL指针。这个技巧运行返回值传达两个不同
片段的信息。首先,有没有找到元素?其次,如果找到,它是哪个元素
更为安全的策略是让函数返回两个独立的值:首先是一个状态值,用于提示查找是否成功;其次是个指针,当状态值提示查找成功时,它所指向的
就是查找到的元素。
对指针进行解引用操作可以获得它所指向的值。但从定义上看,NULL指针并未指向任何东西,因此对NULL指针进行解引用操作是非法的。对指针
解引用操作之前,必须确保它并非NULL指针。
指针、间接访问和左值
间接访问操作符所需要的操作数是个右值,但这个操作数所产生的结果是个左值
int a;
int *d = &a;
指针变量可以作为左值,并不是因为他们是指针,而是因为他们是变量。对指针变量进行间接访问表示我们应该访问指针所指向的位置。间接访问
指定了一个特定的内存位置,这样就可以把间接访问表达式的结果作为左值使用。
*d = 10 - *d;
指针、间接访问和变量
指针
指针的指针
int a = 12;
int *b = &a;
c = &b;
声明
int **c;
int a = 12;
int *b = &a;
int **c = &b;
**c相当于*(*c)
阅读(1416) | 评论(0) | 转发(0) |