📜  C函数测试3

📅  最后修改于: 2020-10-23 01:49:45             🧑  作者: Mango

C函数测试3

11)如果整数数据类型(int)为2字节宽,那么下面程序的输出是什么?

#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);
}
  1. gh
  2. ba
  3. ef
  4. cd

正确的选项是(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。

12)在以下程序中找出错误?

#include

int main()
{
    int b=15;
    void f1();
    b = f1();
    printf("%d\n", b);
    return 0;
}
void f1()
{
    printf("Hello");
}

  1. 错误:不print任何内容
  2. 错误:不允许分配
  3. 没错
  4. 以上都不是

正确的选项是(b)。

说明:

空隙f()的函数不是编译器,同时通过main()函数会看到。

因此,我们需要将此原型声明为void f();。在main()函数。在现代编译器中不会发生这种错误。

因此,在编译上述程序时会给出错误:不允许分配。

13)关于以下程序,哪种说法正确?

#include

int main()
{
    printf("%p\n", main());
    return 0;
}
  1. 错误:无法在printf()内部调用main()
  2. 它无限地打印垃圾值
  3. 无限运行,无需打印任何内容
  4. 没有错误,什么也不print

正确的选项是(c)。

说明:

在printf语句中,即printf(“%p \ n”,main());该语句调用main()函数,然后无限重复,直到堆栈溢出。

因此,程序将无限运行而无需打印任何内容。

14)函数只能通过值或引用来调用。

正确的选项是(a)。

说明:

函数可以通过由参考值或呼叫使用呼叫来调用。因此,以上说法是正确的。

例如:

通过引用进行调用意味着c = sub(&x,&y);这里传递了x和y的地址。

按值调用意味着c = sub(x,y);在这里传递x和y的值。

15)如果在函数连续使用两个“ return”语句,则编译器将生成警告。

正确的选项是(a)。

说明:

是的,如果一个函数连续包含两个返回语句,则编译器将在第二个返回语句中生成“无法访问代码”警告。

例如:

  1.    
  2. #include   
  3. int mul( int int ); / * mul()函数原型* /   
  4.   
  5. int main()
  6. {
  7. 整数x = 5,y = 4,z;
  8. z = mul(x,y);
  9. printf( “ z =%d \ n" ,z);
  10. 返回0;
  11. }
  12. int mul( int x, int y)
  13. {
  14. 返回(x * y);
  15. 返回(x-y); / *警告:代码无法访问* /   
  16. }
  17. 输出:
  18. z = 20