(37)'c++:COMPLETE REFERENCE' 第一部分 第五章(指针) 第三节
2007-03-24 11:53
447 查看
指针操作符
指针操作符在第二章中曾经进行过讨论,这里我们将更进一步了解有关指针操作符的知识.首先我们来复习一下第二章的内容.有两个特定的指针操作符:*和&.操作符&是一种一元操作符,用来返回操作数的内存地址.例如:
m = &count;
在变量中存入了变量count的内存地址.这个地址是计算机的内部地址.对于count,上面的语句没有执行任何操作.可以把&看作返回"the address of",因此前面的赋值语句的含义可以描述为"m变量或者count变量的地址".
为了更好的理解上面赋值语句,我们首先假定count变量的内存地址是2000,假定count变量的值为100.那么经过上面的语句之后, m获得了2000这个值.
第二个指针操作符是*,它和&是互补的.它也是一元操作符,用来返回以其后的操作数为地址的值.例如,假定m指向变量count,那么:
q = *m;
将会把count变量的值赋值给q,也就是q获得了值100.因为100存储在2000这个地址上,2000正是m指针变量中保存的内存地址.可以把*操作符的意义看成"at address".这样以来,上面语句的含义可以看成"变量q或者地址m上的值".
&和*操作符有比其它算术运算操作符更高的优先级,除了负号,它们和符号的优先级是相等的.
必须确保指针变量始终指向正确的数据类型.例如,一个指针变量被声明为整型指针,那么编译器将认定它存储的任何地址都是一个整形数据的地址,无论事实是否如此.因为你可以将任何地址赋值给指针变量.下面的这个例子程序能被正确编译,但是不能输出预想的结果:
#include <stdio.h>
int main( void )
{
double x = 100.1, y;
int *p;
/* The next statement causes p (which is an integer pointer) to point to a double. */
p = (int *)&x;
/* The next statement does not operate as expected. */
y = *p;
printf( "%f", y ); /* won't output 100.1 */
return 0;
}
这个程序没有能正确的把x的值赋给y.因为p被定义为指向整型的指针,所以仅仅4个字节的值会传递给y(假定整型是四个字节),并不是正常的double变量所应该有的8个字节.
注:在C++中不加显示的强制类型转化的把一个类型的指针转换成另一个类型的指针是不合法的.
指针操作符在第二章中曾经进行过讨论,这里我们将更进一步了解有关指针操作符的知识.首先我们来复习一下第二章的内容.有两个特定的指针操作符:*和&.操作符&是一种一元操作符,用来返回操作数的内存地址.例如:
m = &count;
在变量中存入了变量count的内存地址.这个地址是计算机的内部地址.对于count,上面的语句没有执行任何操作.可以把&看作返回"the address of",因此前面的赋值语句的含义可以描述为"m变量或者count变量的地址".
为了更好的理解上面赋值语句,我们首先假定count变量的内存地址是2000,假定count变量的值为100.那么经过上面的语句之后, m获得了2000这个值.
第二个指针操作符是*,它和&是互补的.它也是一元操作符,用来返回以其后的操作数为地址的值.例如,假定m指向变量count,那么:
q = *m;
将会把count变量的值赋值给q,也就是q获得了值100.因为100存储在2000这个地址上,2000正是m指针变量中保存的内存地址.可以把*操作符的意义看成"at address".这样以来,上面语句的含义可以看成"变量q或者地址m上的值".
&和*操作符有比其它算术运算操作符更高的优先级,除了负号,它们和符号的优先级是相等的.
必须确保指针变量始终指向正确的数据类型.例如,一个指针变量被声明为整型指针,那么编译器将认定它存储的任何地址都是一个整形数据的地址,无论事实是否如此.因为你可以将任何地址赋值给指针变量.下面的这个例子程序能被正确编译,但是不能输出预想的结果:
#include <stdio.h>
int main( void )
{
double x = 100.1, y;
int *p;
/* The next statement causes p (which is an integer pointer) to point to a double. */
p = (int *)&x;
/* The next statement does not operate as expected. */
y = *p;
printf( "%f", y ); /* won't output 100.1 */
return 0;
}
这个程序没有能正确的把x的值赋给y.因为p被定义为指向整型的指针,所以仅仅4个字节的值会传递给y(假定整型是四个字节),并不是正常的double变量所应该有的8个字节.
注:在C++中不加显示的强制类型转化的把一个类型的指针转换成另一个类型的指针是不合法的.
相关文章推荐
- (36)'c++:COMPLETE REFERENCE' 第一部分 第五章(指针) 第二节
- (11)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第三节
- (22)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第三节(2)
- (28)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第三节
- (4)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第三节
- (19)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第一节
- (25)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第六、七节
- (16)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第九节操作符(1)
- (5)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第四节
- (14)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第六节
- (18)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第十节
- (23)'c++:COMPLETE REFERENCE' 第一部分 第三章(语句) 第四节
- (26)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第一节
- (31)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第六节
- (33)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第八节
- (27)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第二节
- (2)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第一节
- (8)'c++:COMPLETE REFERENCE' 第一部分 第一章(c语言概述) 第七节
- (29)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第四节
- (32)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第七节