gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:14:58 27 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/30202647/

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