间接和运算符地址

间接寻址运算符 (*) 访问间接值,通过指针。 该操作数必须是指针值。 操作的结果是该操作数解决的值;即在其操作数点的地址处的值。 该结果的类型是针对的类型的操作数地址。

如果操作数指向功能,结果是操作指示符。 如果它指向存储位置,则结果是指定存储位置的左值。

如果该指针的值无效,则结果是未定义的。 下面的列表包含无效的指针值的一些最常见的情况。

  • 指针是一个 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,使用地址初始化的运算符。 初始化等效。

请参见

参考

间接寻址运算符:*

address-of运算符:&