【发布时间】:2020-07-08 04:06:10
【问题描述】:
谁能简要解释一下这些说明符是如何工作的。我搜索了很多关于它们的信息,但仍然对它们感到困惑。(我有一台 32 位电脑)。
#include<stdio.h>
int main()
{
int v,*p;
v=3;
*p=v;
printf("the value of v = %d \n",v);
printf("the address of v = %d \n\n",&v);
printf("the value of v = %p \n",v);
printf("the address of v = %p \n\n",&v);
printf("the value of v = %u \n",v);
printf("the address of v = %u \n\n",&v);
printf("the value of v = %x \n",v);
printf("the address of v = %x \n\n",&v);
printf("value stored through p = %d \n",*p);
printf("address of p = %d \n\n",p);
printf("value stored through p = %p \n",*p);
printf("address of p = %p \n\n",p);
printf("value stored through p = %u \n",*p);
printf("address of p = %u \n\n",p);
printf("value stored through p = %x \n",*p);
printf("address of p = %x \n\n",p);
return 0;
}
【问题讨论】:
-
%p的输出是实现定义的,对应参数的类型必须是void*。此代码中的大多数行都会导致未定义的行为。 -
大部分是未定义的行为。语言定义指定你必须为相应参数的类型使用正确的说明符,否则它是未定义的。
-
能否请您将我添加的输出截图替换为从实际文本中剪切和粘贴的内容,这样会更容易阅读和索引问题。
-
好吧,伙计们,我明白你想说的话,但我心中还有另一个困惑,即在这段代码中如何...int a = 10; int *b = &a; printf("%p\n",b); printf("%X\n",b); ...在 %p 值之前有两个零,即 0018FF20 但在 %x(即十六进制)中,该值只是 18FF20 .....我的意思是这个概念背后的逻辑是什么......
标签: c pointers format-specifiers specifier