c语言题中的一些陷阱

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言题中的一些陷阱相关的知识,希望对你有一定的参考价值。

1、求下列两个数组的长度关系

characX[] = "abcdefg";

       char acY[] ={ ‘a‘, ‘b‘,‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘ };

解析:对于字符串来说,字符串结尾默认为‘\0’,所以acX[]的长度为8,而第二个数组的大小长度为7,而且因为没有用‘\0’结尾,所以在屏幕上输出的值是不确定的.


2、求下列程序的输出结果

void example(characHello[])                      

{

   printf("%d\n", sizeof(acHello));

return;

}

int main()

{

characHello[] = "hello,bit";

   example(acHello);


   system("pause");

      return0;

}

解析:函数传参时有两种方式,一种是值传递,一种是址传递对于数组来说传递的是首元素的

地址。Sizeof(类型)是求内存大小的函数,比如sizeof(int)=4,sizeof(char)=1;.

一个指针变量占有4个字节sizeof(*p)=4

技术分享

3、以下叙述不正确的是(D)

A)、在不同的函数中可以使用相同变量的名字

B)、函数中的形式参数是在栈中保存

C)、在一个函数内定义的变量只在本函数范围内有效

D)、在一个复合语句中定义的变量在本函数范围内有效(复合语句指的是函数中的成对括弧构成的代码)

技术分享

4、设有如下定义

       unsignedlongpulArray[] = { 6, 7, 8, 9, 10 };

    unsignedlong*pulPtr;

    pulPtr =pulArray;

 

    *(pulPtr +3) += 3;

    printf("%d,%d\n", *pulPtr, *(pulPtr + 3));

求程序输出的结果

 技术分享


5、求输出结果

    void example()

{

    inti;

    characNew[20];

    for(i = 0; i < 5; i++)

    {

        acNew[i]= ‘0‘;

    }

    printf("%d\n", strlen(acNew));

    return;

}

int main()

{

 

    example();

    system("pause");

    return0;

}

技术分享


6、全局变量只能在一个被.C包含的头文件中

解析:会发生变量重定义。

当一个程序要引入一个文件时  <> 表示只在当前库中寻找,找不到就会出错。

      “” 表示先在当前库中寻找,找不到再在系统目录中找。

“”比<>的范围要大。

7、有以下程序求输出结果

int main()

{

    union

    {

        shortk;

        chari[2];

    }*s,a;

    s =&a;

    s->i[0]= 0x39;

    s->i[1]= 0x38;

    printf("%x\n", a.k);

    system("pause");

    return0;

}


技术分享


8、设有以下宏定义

#defineN4

#defineY(n)((N+2)*n)

z = 2 * (N+ Y(5 + 1))的结果

技术分享


9int main()

{

 

   unsignedchar a = 200;

   unsignedchar b = 100;

   unsignedchar c = 0;

   c = a +b;

   printf("%d  %d\n", a + b, c);

 

   system("pause");

   return 0;

}

求程序的执行结果()300  44


技术分享


10、求输出结果

int main()

{

   char c;

   unsignedchar uc;

   unsignedshort us;

   c = 128;

   uc = 128;

   us = c +uc;

   printf("0x%x", us);

   us =(unsigned char)c + uc;

   printf("0x%x", us);

   us = c +(char)uc;

   printf("0x%x\n",us);

 

 

   system("pause");

   return 0;

}                   

技术分享


12unsignedshort*sum(unsignedchara,unsignedcharb)

{

 

    unsignedshorts = 0;

    s = a+ b;

    return&s;

}

int main()

{

    unsignedshort*p = NULL;

    unsignedchara = 1, b = 2;

    p = sum(a,b);

    printf("%u+%u", a, b);

    printf("=%u\n", *p);

 

    system("pause");

    return0;

}

求程序执行结果()

技术分享


本文出自 “11132019” 博客,请务必保留此出处http://11142019.blog.51cto.com/11132019/1748030

以上是关于c语言题中的一些陷阱的主要内容,如果未能解决你的问题,请参考以下文章

C语言面试干货——C语言自增/自减操作的陷阱

c语言结构体的问题

跟涛哥一起学嵌入式 第04集:一道面试题,测出你的C语言功底

使用指针时的“陷阱”

嵌入式 Linux C语言——C语言的安全问题和指针陷阱

C 语言陷阱和缺陷[1]