面临毕业就遭遇失业状况, 不清楚当下这句话还行不行得通, 反正我们毕业那个时候, 这句话是流行的, 这也着实让人心里慌慌的。
言归正传,毕业季,为大家分享一些关于C语言的面试题。
1用变量 a 给出下面的定义
a.一个有10个指针的数组,该指针是指向一个整型数的;
b.一个指向有10个整型数数组的指针;
c.有一个指针, 它指向这样一个函数, 这个函数有一个整型的参数, 并且会返回一个整型的数。
d.一个数组, 它有10个指针, 这些指针指向一个函数, 此函数具有一个整型类型的参数, 并且会返回一个整型的数。
答案:
int * a[10];int (*a)[10]int (*a)(int);int (*a[10])(int);
2写一段代码计算结构体、联合、位段、内存大小
答案:
struct A{int a;char b;float c;struct A d;double e;};sizeof(A)
3代码改错
下面代码涉及到动态内存开辟,请改正下面错误代码:
wap( int* p1,int* p2 ){int * p;*p = *p1;*p1 = *p2;*p2 = *p;}
答案是, p 属于野指针, 它是那种指向一个已被删除对象的指针, 或者是指向一个未申请访问受限内存区域的指针。
void swap(int *pa, int *pb){int tmp;tmp = *pa;*pa = *pb;*pb = tmp;}
4数组和链表的区别?
数组:数据顺序存储,固定大小;
链表:数据可以随机存储,大小可动态改变;
5要对绝对地址0x100000赋值
要对绝对地址0x100000赋值,我们可以用:
(unsigned int*)0x100000 = 1234;
要是想让程序去到绝对地址为0x100000的地方去执行, 那么应当如何去做呢?
答案:
*((void?(*)(?))0x100000)();(void (*)())0x100000 //首先要将0x100000强制转换成函数指针*((void (*)())0x100000)(); //然后再调用它:
6const 有什么用途?
答案:
1.可以定义 const 常量;
2.可以用const修饰函数的参数, 也可以修饰函数的返回值, 甚至还能修饰函数的定义体。那些被const修饰的东西, 全都受到强制保护, 能够预防意外的变动, 具备提升程序健壮性的作用。
(void *)ptr 所占用的 7 个空间位置, 和 (*(void **))ptr 这样的方式所获取到的结果, 二者能不能是一样的情况呢?
其中ptr为同一个指针。
答案:
他们的值相同。

尝试使用#define来声明一个常量, 以此来明确1年之中所包含的秒数(暂且不考虑闰年相关的问题), 这样做是否可行呢。
答案:
# SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
要点:
A.没有以分号结束;
B.明白预处理器会替你对常数表达式的值进行计算, 也就是60乘以60乘以24乘以365, 而非315360该, , 00。
C.考虑到了16位机将会溢出,巧妙运用了UL。
创造一个被称作“标准”的宏MIN, 它用于在输入两个参数之后, 进行并返回其中较小的那一个, 对吗。
答案:
# MIN(A,B) ((A) <= (B) ? (A) : (B))
要点:
A.参数用括号括起来;
B.考察能否合理运用条件运算符;
10
Heap与Stack的差别?
答案:Heap是堆,Stack是栈。
堆的空间是程序在运行时由系统去做自动分配以及释放操作的, 而栈上的空间则是要通过手动方式来进行分配以及释放的。
栈空间存在着有限的情况, 堆指的是相当大的那种自由存储区域, 通过malloc函数所分配的内存空间是在堆上面的。
网上经典例子:
int a = 0; //全局初始化区char *p1;//全局未初始化区void main(void){int b; //栈char s[] = "abc"; //栈char *p2; //栈char *p3 = "123456"; //123456 在常量区,p3在栈上static int c =0; //全局(静态)初始化区p1 = (char *)malloc(10); //堆p2 = (char *)malloc(20); //堆}
11
下面的声明都是什么意思?
代码:
const int a;int const a;const int *a;int * const a;int const * a const;
答案:
A.前两个的作用是一样,a是一个常整型数;
B.一个指向常整型数的指针, 它意味着a, 也就是, 整型数不能被修改, 可是指针能够做到, 这是第三个所表达的意思。
C.第四个意思, a是一个指针, 它指向整型数, 且这个指针是常指针, 这意味着, 指针指向的整型数能够被修改, 然而指针自身不能够被修改。
D.最末那一个所表示的是,a这是一个指向常量整型数的常量指针, 也即是说, 指针所指向的那个整形数是不能够被修改的, 与此同时, 指针本身也是不可以被修改的。
12
sizeof和strlen的区别?
答案是, sizeof属于运算符, 它是在编译的时候就已经计算好了的;然而strlen却是函数,它需要在运行的时候才能够进行计算。
编排?|?strongerHuang
微信公众号 |?嵌入式专栏

CopyrightC 2009-2025 All Rights Reserved 版权所有 芜湖人才网 本站内容仅供参考,不承担因使用信息、外部链接或服务中断导致的任何直接或间接责任,风险自担。如有侵权,请联系删除,联系邮箱:ysznh@foxmail.com 鄂ICP备2025097818号-15
地址: EMAIL:qlwl@foxmail.com
Powered by PHPYun.