int main(){
int number = 30;
int* nPointer = NULL;
nPointer = &number;
printf("number:\n");
printf("Value of number: %d \n", number);
printf("Value of &number: %d \n", &number);
printf("Address of number: %x \n", number);
printf("Address of &number: %x \n\n", &number);
printf("nPointer:\n");
printf("Value of nPointer: %d\n", nPointer);
printf("Value of &nPointer: %d \n", &nPointer);
printf("Value of *nPointer: %d \n", *nPointer);
printf("Address of nPointer: %x\n", nPointer);
printf("Address of &nPointer: %x \n", &nPointer);
printf("Address of *nPointer: %x \n", *nPointer);
return 0;
}
总的来说,这些是如何连接的?显然他们只是如何以及为什么?
答案 0 :(得分:3)
您的大部分代码都会导致undefined behaviour。使用printf
函数,您必须提供与参数类型对应的格式说明符。它不会自动为您转换。
此外,您的大多数文字说明都与代码不符。
这是修复了未定义行为的代码,修复了注释:
int main()
{
int number = 30;
int* nPointer = &number;
printf("number:\n");
printf("Value of number (base 10): %d \n", number);
printf("Value of &number: %p \n", (void *) &number);
printf("Value of number (base 16): %x \n", number);
printf("nPointer:\n");
printf("Value of nPointer: %p\n", (void *) nPointer);
printf("Value of &nPointer: %p \n", (void *) &nPointer);
printf("Value of *nPointer (base 10): %d \n", *nPointer);
// last section redundant as it prints the same values but with wrong commentary
return 0;
}
void *
是必要的,因为有不同种类的指针,而%p
只知道void *
。 (在常见系统上,没有它你可能会离开,因为普通系统对所有指针都使用相同的格式。)
“&x
的值”与“{1}}的地址”相同。指针的值是它指向的对象的地址。
答案 1 :(得分:0)
变量(如int nPointer)存储在内存中。而内存是内存地址的集合。
& number表示变量' number'的地址。在记忆中。
' nPointer'是一个整数指针,因为你声明它是' int * nPointer'
整数指针将存储一个'整数的地址。变量
所以当你这样做时,' nPointer =& number' ,nPointer将存储变量'数字'。
的地址地址* p是存储在p。
中的值* nPointer读作:存储在nPointer中的地址的值。
nPointer是一个普通的整数变量。
& nPointer读作:变量nPointer的地址
答案 2 :(得分:0)
假设以下声明和初始化:
int number = 30;
int *nPointer = &number;
然后以下是真的:
*nPointer == number == 30
nPointer == &number == address of the number variable
&nPointer == address of the nPointer variable