gpt4 book ai didi

c - 当函数需要指针时传递常量整数

转载 作者:太空狗 更新时间:2023-10-29 14:50:29 24 4
gpt4 key购买 nike

将常量整数值传递给需要指针的函数的最佳/最规范的方法是什么?

例如,write函数

write (int filedes, const void *buffer, size_t size);

假设我只想写一个字节 (a 1),我会这样想:

write (fd, 1, 1);

但我显然得到了警告

warning: passing argument 2 of 'write' makes pointer from integer without a cast

我知道我能做到

int i = 1;
write (fd, &i, 1);

但这有必要吗?在不需要声明/初始化新变量的情况下执行此操作的最正确方法是什么?

最佳答案

在 C89/90 中,您通常不能在不声明新变量的情况下执行此操作。关于 C 中指针的事情是它们总是指向左值。左值是在内存中有位置的东西。因此,为了向您的函数提供正确的参数,您需要在内存中有一个位置的东西。这通常需要一个定义,即一个对象,一个变量。 C 中的常量不是左值,因此您不能在那里使用常量。介于常量和变量之间的东西是文字。 C89/90 只有一种文字:字符串文字。字符串文字是左值,但不是变量。因此,您可以使用字符串文字作为 write 的第二个参数。

在 C99 中,文字的概念被扩展到字符串文字之外。在 C99 中,您还可以为此目的使用复合文字,它也恰好是左值。在您的示例中,您可以将您的函数称为

write(fd, (char[]) { 1 }, 1)

但此功能仅在 C99 中可用。

关于c - 当函数需要指针时传递常量整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116982/

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