我遇到了一些代码,我原以为它是有问题的,但由于某些我无法理解或找到解释的原因,它却能正常工作。如果有人能给我指点迷津,我将不胜感激。以下是示例代码:
#include <stdio.h>
typedef char char_block[16];
void f(char_block *b) {
printf("block 0x%p - b\n", b);
printf("block 0x%p - *b\n", *b);
}
main() {
char_block b = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
f(&b);
}
使用g+编译并执行,会打印出以下内容:
block 0x0x7fff4794b4e0 - b
block 0x0x7fff4794b4e0 - *b
我曾天真地认为
将参数声明为“类型的数组”应调整为“类型的限定指针”
意味着该函数将等同于
void f(char ** b)
但这里还有其他事情发生了吗?