我遇到过一些我认为已被破坏的代码,但由于我无法理解的东西或找到解释而起作用.如果有人能帮我,我会非常感激.它在以下片段中演示:
#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);
}
Run Code Online (Sandbox Code Playgroud)
使用g +编译并执行,打印:
block 0x0x7fff4794b4e0 - b
block 0x0x7fff4794b4e0 - *b
Run Code Online (Sandbox Code Playgroud)
我天真地认为
参数声明为''类型数组''应调整为''限定指向类型''
意味着该功能将等同于
void f(char ** b)
Run Code Online (Sandbox Code Playgroud)
但是还有其他事情发生在这里?