📅  最后修改于: 2020-10-23 01:49:45             🧑  作者: Mango
#include
void fun(char**);
int main()
{
char *argmntv[] = {"gh", "ef", "cd", "ab"};
fun(argmntv);
return 0;
}
void fun(char **x)
{
char *y;
y= (x+= sizeof(int))[-1];
printf("%s\n", y);
}
正确的选项是(c)。
说明:
上面程序的输出在Windows(Turbo C)中为ef,在Linux(GCC)中为ab。
由于C是与机器相关的语言,因此sizeof(int)在不同的操作系统中可能返回不同的值。
在Windows操作系统中,sizeof(int)= 2个字节。
在Linux操作系统中,sizeof(int)= 4个字节。
给定的int大小为2个字节,因此程序输出基于Windows(Turbo C)编译器。因此,程序的输出为ef。
#include
int main()
{
int b=15;
void f1();
b = f1();
printf("%d\n", b);
return 0;
}
void f1()
{
printf("Hello");
}
正确的选项是(b)。
说明:
空隙f()的函数不是编译器,同时通过main()函数会看到。
因此,我们需要将此原型声明为void f();。在main()函数。在现代编译器中不会发生这种错误。
因此,在编译上述程序时会给出错误:不允许分配。
#include
int main()
{
printf("%p\n", main());
return 0;
}
正确的选项是(c)。
说明:
在printf语句中,即printf(“%p \ n”,main());该语句调用main()函数,然后无限重复,直到堆栈溢出。
因此,程序将无限运行而无需打印任何内容。
正确的选项是(a)。
说明:
函数可以通过由参考值或呼叫使用呼叫来调用。因此,以上说法是正确的。
例如:
通过引用进行调用意味着c = sub(&x,&y);这里传递了x和y的地址。
按值调用意味着c = sub(x,y);在这里传递x和y的值。
正确的选项是(a)。
说明:
是的,如果一个函数连续包含两个返回语句,则编译器将在第二个返回语句中生成“无法访问代码”警告。
例如:
#include
int mul( int , int ); / * mul()函数原型* /
int main()
{
整数x = 5,y = 4,z;
z = mul(x,y);
printf( “ z =%d \ n" ,z);
返回0;
}
int mul( int x, int y)
{
返回(x * y);
返回(x-y); / *警告:代码无法访问* /
}
输出:
z = 20