C语言深度解剖最后测试题【答案】

    xiaoxiao2021-03-25  73

    答案

    “>6”

    2.strcpy出问题,没有/0

    3.i=10,j=1;

    4.除了sizeof(a)是400

    5.255

    6. 1)*p不能改,p可以改 2)*p不能改,p可以改 3)p不能改,*p可以改 4)*p和p都不能改

    7.volatile关键字的作用: 防止变量被意外的改变,每次都要从内存中读取。

    8.5,2000000 //考虑大小端的问题,指针偏移一个字节 int ptr2 = (int )((int)a+1); 这时a被强制转换为整形(为不是int*型),所以地址值+1而不是+4 同时因为计算机是小端序,所以造成这样 内存:

    高地址 |---01---|<--a(数组a首地址) |---00---|<--(*ptr2=0x02000000) |---00---| |---00---| |---02---| |---00---| |---00---| |---00---| |---03---| |---00---| 低地址

    9.0x10

    10.考察宏替换

    #define SQR(x) ((x)*(x)) //因为宏的本质是字符串的替换,所以 //一定不能省了括号中的括号,避免出现优先级问题 //比如SQR(1+2)时,得到的结果可能有问题

    11.(1)占12byte(2)占8byte

    12.

    int *p = (int *)0x12ff7c; *p = 0x100; 或者*(int*)0x12ff7c = 0x100;

    13.2,5

    14. 0x100014, 0x100001,//因为这里转换成unsigned long而不是指针 0x100004,

    15.1 注意逗号运算符

    16.不应该传进去b[10],应该传进去b

    char *name没有分配空间

    18. 0 1 2 5 10

    19.getchar的返回值是int这可能造成问题

    20.

    //我自己写的 int is_big_or_little() { int i = 0x11223344; char *p = (char *)&i; if(*p == 0x11) return 0;//大端序 else if(*p == 0x44) return 1;//小端序 else return -1;//错误 } //书上的答案 int checkSystem() { union check{ int i; char ch; }c; c.i = 1; return (c.ch == 1); }
    转载请注明原文地址: https://ju.6miu.com/read-23137.html

    最新回复(0)