int *var_name;
在 C 中,按照約定的陳述句意味著 that*var_name
的型別是int
,這意味著它var_name
是一個整數指標。
但現在考慮一下這一系列的陳述。
int a = 5;
int *var_name = &a;
但是在這里我們如何分配地址a
到*var_name
which 是型別的int
?
uj5u.com熱心網友回復:
您不是將地址分配給*var_name
,而是分配給var_name
。int
正如你所發現的,這個變數的型別是“指標”。
哦,這是一個初始化,而不是一個賦值。
uj5u.com熱心網友回復:
這就是 C 中的語法的作業方式。
int *p = &a;
完全等價于:
int *p;
p = &a;
不難理解為什么如果它按照您的想法作業就沒有意義。考慮這段代碼:
int *p;
p = &a;
*p = 42;
現在想象一下翻轉最后兩個陳述句,如下所示:
int *p;
*p = 42; // To which address do we write 42? p is not initialized.
p = &a;
因此,盡管 的含義可能不直觀int *p = &a;
,int *p; p = &a;
但它實際上是定義它的唯一合理方式。
uj5u.com熱心網友回復:
在這份宣告中
int *var_name = &a;
宣告了指標型別的變數 var_nameint *
并且該變數(指標)由變數的地址初始化a
。
您似乎*
在宣告和運算式中混合了符號。
在宣告中它表示一個指標。在運算式中,它表示取消參考運算子。
考慮以下演示程式
#include <stdio.h>
int main( void )
{
int a = 5;
int *var_name = &a;
printf( "The address stored in var_name is %p\n", ( void * )var_name );
printf( "The address of the variable a is %p\n", ( void * )&a );
printf( "The value of the object pointed to by var_name is %d\n", *var_name );
printf( "The value stored in the variable a is %d\n", a );
}
它的輸出可能看起來像
The address stored in var_name is 00EFFAC0
The address of the variable a is 00EFFAC0
The value of the object pointed to by var_name is 5
The value stored in the variable a is 5
就是在這一行
int *var_name = &a;
*var_name
表示指標型別的宣告符。
在這次通話中
printf( "The value of the object pointed to by var_name is %d\n", *var_name );
*var_name
表示帶有取消參考運算子的運算式*
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425198.html
下一篇:函式完成后用作映射中值的指標損壞