1.static说明符的作用
由static修饰的变量,其存储类型为全局静态区,变量在程序的整个运行过程中不会被销毁,并且只会被初始化1次。
2.const限定符的作用,指针常量和常量指针的区别。
const限定符的作用就是把声明为const的数据(变量、指针、数组、结构等)保护起来,它们具有只读属性的,不能被改变。
3.define和const定义常量的区别
define是宏定义,程序在预处理阶段将用define定义的内容进行了替换
const定义的常量,在程序运行时在常量表中,系统为它分配内存。
define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。
const定义的常量,在编译时进行严格的类型检验,可以避免出错。
define定义表达式时要注意“边缘效应”
4.volatile修饰符的作用,在什么情况下使用
变量如果加了 volatile 修饰,则会从内存重新装载内容,而不是直接从寄存器拷贝内容。
5.restrict(限制,约束)修饰符有什么作用?
所有修改该指针所指向内存中内容的操作,都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改。
6.字节对齐
需要字节对齐的根本原因在于CPU访问数据的效率问题
7.可变参数函数处理
#include<stdarg.h>//包含stdarg.h头文件,处理可变参数函数
#include<stdio.h>
void print_ints(int args,…);//args后是可变参数
{
va_list ap;//va_list用来保存可变参数
va_start(ap,args);//说明可变参数从哪里开始
int i;
for (i = 0;i < args;i++)
printf(“ragument:%i\n”,va_arg(ap,int));//va_arg接受两个值,va_list和参数类型
va_end(ap);//用va_end告诉c做完了
}
void main()
{
print_ints(3,79,101,32);
}
8.枚举类型大小
枚举变量的取值为花括号内的任意一个值(有且只能有其中一个值),而这个值是int型的,在X86系统中,int型的数据占内存4个字节。所以sizeof(c) = 4,也就是枚举变量的值为4。
网址1:https://blog.csdn.net/lwj103862095/article/details/8607425
网址2:https://blog.csdn.net/bulebin/article/details/54388735
9.inline关键字有什么作用,什么情况下使用
在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。
inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。
下面我们来看一个例子:
#include <stdio.h>
//函数定义为inline即:内联函数
inline char* dbtest(int a) {
return (i % 2 > 0) ? “奇” : “偶”;
}
int main()
{
int i = 0;
for (i=1; i < 100; i++) {
printf(“i:%d 奇偶性:%s /n”, i, dbtest(i));
}
}
上面的例子就是标准的内联函数的用法,使用inline修饰带来的好处我们表面看不出来,其实,在内部的工作就是在每个for循环的内部任何调用dbtest(i)的地方都换成了(i%2>0)?”奇”:”偶”,这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
10.switch表达式可以使用什么类型的变量
int , char
11.写个程序判断大小端
大端字节序存储:把一个数的低字节序的内容放在高地址处,相反,把高字节序的内容存放在低地址处,这种存储方式称为大端。
小端字节序存储:把一个数的低字节序的内容存放在低地址处,把高字节序的内容存放在高地址处,这种存储方式称为小端 。
网站:https://blog.csdn.net/qq_42270373/article/details/82432917
方法一:
方法二:
12.结构体位域
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度
位域在本质上就是一种结构类型, 不过其成员是按二进位分配的。
13.结构体对齐
网站:https://blog.csdn.net/kuimzzs/article/details/81605160
14.短路求值
作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值(short-circuit evaluation)
如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:
expr1 || expr2
15.可以在头文件中定义全局变量吗?
注意头文件中不可以放变量的定义!!!一般情况下头文件中只放变量的声明,因为头文件要被其他文件包含(即#include),如果把定义放到头文件的话,就不能避免多次定义变量,C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。
不过有三个例外,一下三中实体的定义也可放到头文件中。
1.值在编译时就已知的const 变量的定义可以放到头文件中
如:const int num(10);
2.类的定义可以放到头文件中
3.inline 函数
这三个实体可以定义在多个源文件中,只要在每个源文件中的定义相同。
16.全局变量不初始化的话,默认值是什么
数字都是0,bool类型也就是false,chat比较特殊是’\0’也就是字符结束的标记,然后string默认是空字符串也就是”或者NULL。指针类型除了char*默认是空字符串”或者NULL,其他就默认都是0。
17.memmove和memcpy的区别
当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
注:部分答案来源于网络,仅供参考