关于问题为什么我每次都必须在 C 中指定数据类型?和我之前的问题如何使用 printf() 以十六进制(所以没有任何格式)一个接一个地读取内存字节
是否可以为我澄清以下问题?
int32_t a[3]={21,3,1000031};
char* p1=&a[0]; /* char is 1-bye and &a[0] is 0x0004 for example */
printf("p1 in hex=%x\n",*p1); /* 4 bytes starting from word-aligned address p1 */
printf("(p1+3)=%d",(p1+3)); /* 4 bytes starting from a NON word-aligned address?* line 2 printf */
printf("p1+3=%p",p1+3) /* line 3 print*/
%x 和 %d总是告诉 printf 使用 int 格式,在我的电脑中是 4 字节?我对吗?
(p1+3) 是一个非字对齐地址 Ox004+3= 0x007,那么 printf() 在这种情况下显示什么?换句话说,第 2 行 printf 涉及哪些字节?
另外, %p formatter(void *) 是否需要 1 个字节来读取(因为 char)或者因为我们谈论指针并且它们总是占用 4 个字节(一个字)?
总结一下我的问题,%d %x %p,.. 他们是从内存中读取一个恒定大小(取决于 pc)还是取决于他们相应参数的大小?