1.描述一下普通局部变量、普通全局变量、静态全局变量、静态全局变量的区别
局部变量在定义它的函数内有效,但是函数返回后失效
全局变量在整个工程文件内都有效
静态局部变量只在他的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失
静态全局变量只在定义它的文件内有效
2.如何在其他文件中引用该变量/函数
使用extern修饰变量的声明。
举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。 (详情请看:(35条消息) C语言中extern的用法_知之可否的博客-CSDN博客)
3.哪些情况下会出现野指针。
指针末初始化
指针指向的变量被释放后没有置为NULL
指针操作超过所指向变量的生存期
4.数组地址和数组首元素地址的区别
(1) 它们的地址是相等的
(2) 数组元素地址如果是p,则p+1指向第二个元素的地址
(3) 数组地址如果是&p,则p+1指向的就是这个数组末尾元素的下一个的地址
5.指针数组和指针数组的区别
指针数组是存放指针的数组,这个变量就是一个用指针修饰数组,数组中每个元素都是指针。
数组指针是指向数组的指针,这个变量是一个指针,用数组修饰,这个指针存储着数组的首元素。
6. sizeof和strlen的区别
sizeof是一个运算符,它所计算的是分配空间的实际的字节数。
strlen是一个库函数,计算的空间中字符的个数,不包含‘\0’,也可以说是计算字符串的有效长度。
7.字节存储顺序:大端存储顺序、小端存储顺序
大端存储顺序: 按照地址从低到高的顺序,先存储数据高位,再存储数据低位;
小端存储顺序:按照地址从低到高的顺序,先存储数据低位,再存储数据高位;