我只是好奇——为什么当一个函数需要一个指针时,C 允许你传递取消引用的指针。这是一个例子:
typedef struct {
char message[255];
} Bla;
// so he's the function that's expecting the pointer
void cool_function(Bla *_bla) {
}
Bla *woot = (Bla *)malloc(2 * sizeof(Bla));
woot[0] = (Bla) {
.message = "bla bla bla"
};
// woot itself is a pointer, but it's getting dereferenced when I am adding [0]
cool_function(woot[0]);
现在编译得很好,但是当我实际使用_bla(即_bla->what)时,BAM,运行时错误。
所以这让我很困惑——如果它按值传递给这个显然需要一个指针的函数,它会发生什么?为什么它甚至可以编译?
我对C相当陌生,所以请不要跳过我。:/
* 更新 *
抱歉之前没有提到,但这是 Pebble Watch 的应用程序,它使用特殊版本的 gcc 用于特定的 arm 处理器 (arm-cs-tools)。
* 更新 2 *
我想我发现了它为什么这样做。函数“cool_function”实际上是在一个单独的文件中,当我在头文件中声明该函数时,它只是用 -forgot void cool_function()
to include声明的Bla *_bla
。但定义是void cool_function(Bla *_bla)
。混淆编译器都是我的错。