gpt4 book ai didi

c - 将取消引用的指针(即按值)传递给需要指针的函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:58 27 4
gpt4 key购买 nike

我只是好奇 - 为什么 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”实际上在一个单独的文件中,当我在 header 中声明该函数时,它仅使用 void cool_function() 声明 - 忘记包含 Bla *_bla。但定义是 void cool_function(Bla *_bla)。混淆编译器都是我的错。

最佳答案

你应该得到编译器错误:

error: passing 'Bla' to parameter of incompatible type 'Bla *'; take the address with &
cool_function(woot[0]);

如果您使用 gcc 或 clang,请尝试使用 -WError 和 -Wall 选项编译您的程序。

关于c - 将取消引用的指针(即按值)传递给需要指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21806434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com