0
点赞
收藏
分享

微信扫一扫

C语言面试题笔记

Ad大成 2022-03-17 阅读 87
  1. 解释 char *const*(*next)();
    定义了函数指针next,next指向了一个无参且返回值为一个指向一个常量指针的字符型指针的函数。

  2. 解释 char* (*c[10])(int **p);
    定义了函数指针数组c,c中的元素是指向参数为int型二级指针且返回值为字符型指针的函数的函数指针。

  3. 以下代码的问题

    char*s = "AAA";
    printf("%s",s);
    s[0] = 'B';
    printf("%s",s);
    

    "AAA"为只读的字符串常量,修改它会引发段错误

  4. 要求将绝对地址0x40020800的内容设置为整形数0x3456

    *(unsigned int*)0x40020800 = 0x3456;
    
  5. 以下两种情况的意图都是要定义dps和tps作为结构体指针指向s,那种方式更好?

    #define dps struct s*
    typedef struct s* tps; 	
    

    使用#define定义两个指针时,dps p1,p2在预编译时被替换成 struct s* p1,p2,只有p1被定义成了结构体指针,而使用typedef不会出现这种情况。所以此时使用typedef来定义更好。

  6. 以下代码有什么问题?该如何修改?

    #include <stdio.h>
    char* gett_str(void);
    int main(){
    	char* p = get_str();
    	printf("%s\n",p);
    	return 0;
    }
    char* gett_str(void){
    	char str[] = {a,b,c,d};
    	return str;
    }
    

    函数get_str()在调用结束后在栈区的空间即被释放,之后对局部变量str的访问便没有意义。可以在str[]前加关键字static将字符数组存放在静态区。

  7. 下面代码的运行结果是什么?

    #inclde <stdio.h>
    int main(){
    	unsigned int a = 6;
    	int b = -20;
    	a+b > 6 ? printf(">6") : printf("<=6");
    	return 0;
    }
    

    无符号整数与有符号整数相加时有符号整数转换为无符号整数再相加。a+b=6+20>6,打印“>6”

  8. 什么是大端模式?什么是小端模式?编写代码测试你计算机是大端模式还是小端模式。
    大端模式:数据的低位存放在内存的高地址,数据的高位存放在内存的低地址。
    小端模式:数据的低位存放在内存的低地址,数据的高位存放在内存的高地址。

    #include<stdio.h>
    int main(){
    	int i;
    	union Test{
    			unsigned int n;
    			char arr[4];
    	}
    	union Test t;
    	t.n = 0x12345678;
    	for(i=0;i<4;i++)
    		printf("&arr[%d]=%p,arr[%d]=0x%#x\n",i,&t.arr[i],i,t.arr[i]);
    }
    
  9. 想取出当前计算机系统下无符号整数int型的最小值和最大值,评价下面代码片段

    unsigned int zero = 0;
    unsigned int compzero = 0xFFFF;
    

    int型数据的位数由系统环境决定,第二行改成unsigned int compzero = ~0

  10. 下面代码的作用是在数组中查找特定的元素,若将&&换成&是否仍能实现功能?

    i = 0while(i<arrsize && arr[i]!=x)
    	i++;
    

    当i = arrsize时,i<arrsize为0,逻辑与后的arr[i]!=x不会执行。若将&&换为&,arr[i]!=x会和0进行按位与计算,发生了数组越界,可能产生不合法的访问。

  11. 下面的程序会输出什么?

    #include<stdio,h>
    int main(){
    	int i = 43;
    	printf("%d",printf("%d",printf("%d",i)));
    	return 0;
    }
    

    printf()函数的返回值为输出字符的个数,故屏幕打印 4321

举报

相关推荐

0 条评论