为什么这个 *ptr 不给出存储在 ptr 变量中包含的内存地址中的实际值?
Why does this *ptr NOT give the actual value stored at the memory address contained in ptr variable?
这是一个关于指针的基本 C 程序:
#include <stdio.h>
int main() {
int variable = 20;
int *pointerToVariable;
pointerToVariable = &variable;
printf("Address of variable: %x\n", &variable);
printf("Address of variable: %x\n", pointerToVariable);
printf("Address of variable: %x\n", *pointerToVariable); // * is the DEREFERENCING OPERATOR/INDIRECTION OPERATOR in C.
//It gives the value stored at the memory address
//stored in the variable which is its operand.
getchar();
return 0;
}
这会产生以下输出:
Address of variable: 8ffbe4
Address of variable: 8ffbe4
Address of variable: 14
但是 *pointerToVariable
应该打印 20,不是吗?因为 *
给出了存储在其操作数中存储的内存地址的实际值,对吗?
我错过了什么?
首先,
printf("Address of variable: %x\n", &variable);
printf("Address of variable: %x\n", pointerToVariable);
是错误的,因为你使用了错误的格式说明符导致 undefined behavior。
要打印地址,您需要
- 使用
%p
格式说明符
- 将相应的参数转换为
(void *)
然后,对于
printf("Address of variable: %x\n", *pointerToVariable);
语句,%x
格式说明符打印提供的整数值的十六进制表示,因此您得到了正确的输出。
14
是 20
的 HEX
值。
将 printf
格式说明符从 %x
改为 %d
以将 20
作为输出
printf("Address of variable: %d\n", *pointerToVariable);
此外,指针的正确格式说明符是 %p
,因此
printf("Address of variable: %x\n", pointerToVariable);
必须
printf("Address of variable: %p\n", (void *)pointerToVariable);
您的格式是十六进制(以 16 为底)(%x) 此行:
printf("Address of variable: %x\n", *pointerToVariable);
// 输出:14
如果您想要以 10 为基数的输出,则需要提供正确的格式:
printf("Address of variable: %d\n", *pointerToVariable); // output : 20
// 1*16 + 4 = 20
祝你好运
这是一个关于指针的基本 C 程序:
#include <stdio.h>
int main() {
int variable = 20;
int *pointerToVariable;
pointerToVariable = &variable;
printf("Address of variable: %x\n", &variable);
printf("Address of variable: %x\n", pointerToVariable);
printf("Address of variable: %x\n", *pointerToVariable); // * is the DEREFERENCING OPERATOR/INDIRECTION OPERATOR in C.
//It gives the value stored at the memory address
//stored in the variable which is its operand.
getchar();
return 0;
}
这会产生以下输出:
Address of variable: 8ffbe4
Address of variable: 8ffbe4
Address of variable: 14
但是 *pointerToVariable
应该打印 20,不是吗?因为 *
给出了存储在其操作数中存储的内存地址的实际值,对吗?
我错过了什么?
首先,
printf("Address of variable: %x\n", &variable);
printf("Address of variable: %x\n", pointerToVariable);
是错误的,因为你使用了错误的格式说明符导致 undefined behavior。
要打印地址,您需要
- 使用
%p
格式说明符 - 将相应的参数转换为
(void *)
然后,对于
printf("Address of variable: %x\n", *pointerToVariable);
语句,%x
格式说明符打印提供的整数值的十六进制表示,因此您得到了正确的输出。
14
是 20
的 HEX
值。
将 printf
格式说明符从 %x
改为 %d
以将 20
作为输出
printf("Address of variable: %d\n", *pointerToVariable);
此外,指针的正确格式说明符是 %p
,因此
printf("Address of variable: %x\n", pointerToVariable);
必须
printf("Address of variable: %p\n", (void *)pointerToVariable);
您的格式是十六进制(以 16 为底)(%x) 此行:
printf("Address of variable: %x\n", *pointerToVariable);
// 输出:14
如果您想要以 10 为基数的输出,则需要提供正确的格式:
printf("Address of variable: %d\n", *pointerToVariable); // output : 20
// 1*16 + 4 = 20
祝你好运