间接和运算符地址
间接寻址运算符 (*) 访问间接值,通过指针。 该操作数必须是指针值。 操作的结果是该操作数解决的值;即在其操作数点的地址处的值。 该结果的类型是针对的类型的操作数地址。
如果操作数指向功能,结果是操作指示符。 如果它指向存储位置,则结果是指定存储位置的左值。
如果该指针的值无效,则结果是未定义的。 下面的列表包含无效的指针值的一些最常见的情况。
指针是一个 null 指针。
指针指定在引用时不可见的本地项目的地址。
指定用于指针所指向的对象的类型不正确对齐的地址。
指针指定执行程序不使用的地址。
address-of 运算符 () 生成其操作数的地址。 操作数 address-of 运算符可以是操作指示符或指定对象不是位域和未声明的 注册 存储类说明符的左值。
地址操作的结果是指向该操作数。 指针解决的类型属于该操作数的类型。
address-of 运算符仅适用于基础知识、结构或声明在文件范围级别的联合类型的变量,或对 subscripted 引用数组。 在这些表达式,不包括运算符地址的常数表达式中添加或从地址表达式中减去。
示例
下面的示例使用这些声明:
int *pa, x;
int a[20];
double d;
此语句使用 address-of 运算符:
pa = &a[5];
address-of 运算符 () 为该数组 a的第六个元素的地址。 该结果。指针变量 pa存储。
x = *pa;
间接寻址运算符 (*) 用于对该地址的 int 值。 pa存储的访问此示例。 该值赋给整数变量 x。
if( x == *&x )
printf( "True\n" );
此示例将单词 True,表明,应用间接寻址运算符的结果。 x 地址是否与 x。
int roundup( void ); /* Function declaration */
int *proundup = roundup;
int *pround = &roundup;
在函数 roundup 声明,对 roundup 的两个指针声明并初始化。 使用函数,的名称第一个指针, proundup,初始化,,而第二, pround,使用地址初始化的运算符。 初始化等效。