gpt4 book ai didi

c - & 运算符在函数指针赋值中可选

转载 作者:太空狗 更新时间:2023-10-29 16:57:30 26 4
gpt4 key购买 nike

在下面的代码中:

/* mylog.c */
#include <stdio.h>
#include <stdlib.h> /* for atoi(3) */

int mylog10(int n)
{
int log = 0;
while (n > 0)
{
log++;
n /= 10;
}
return log;
}

int mylog2(int n)
{
int log = 0;
while (n > 0)
{
log++;
n >>= 1;
}
return log;
}

int main(int argc, const char* argv[])
{
int (*logfunc)(int); /* function pointer */
int n = 0, log;

if (argc > 1)
{
n = atoi(argv[1]);
}

logfunc = &mylog10; /* is unary '&' operator needed? */

log = logfunc(n);
printf("%d\n", log);
return 0;
}

行内

logfunc = &mylog10;

我注意到一元运算符 &(地址)是可选的,无论是否使用它,程序都以相同的方式编译和运行(在带有 GCC 4.2.4 的 Linux 中)。为什么?这是特定于编译器的问题,还是编译器接受了两种不同的语言标准?谢谢。

最佳答案

你是对的,& 是可选的。函数和数组一样,可以自动转换为指针。它既不是特定于编译器的,也不是不同语言标准的结果。根据标准,第 6.3.2.1 节,第 4 段:

A function designator is an expression that has function type. Except when it is the operand of the sizeof operator or the unary & operator, a function designator with type "function returning type" is converted to an expression that has type "pointer to function returning type".

关于c - & 运算符在函数指针赋值中可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298654/

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