background image

sizeof(ss)结果为 11,ss 是数组,计算到"\0"位置。
sizeof(*ss)结果为 1,*ss 是第一个字符。
第三个例子:
char ss[100] = "0123456789";
sizeof(ss)结果为 100,ss 表示在内存中预分配的大小,100*1。
strlen(ss)结果为 10,它的内部实现是用一个循环计算字符串的长度,直到"\0"为止。
第四个例子:
int ss[100] = "0123456789";
sizeof(ss)结果为 400,ss 表示在内存中的大小,100*4。
strlen(ss)错误,strlen 的参数只能是 char*,且必须是以"\0"结尾。
第五个例子:
struct X
{

int i;
int j;
char k;

} x;
sizeof(X)结果为 12,内存补齐。
sizeof(x)结果为 12,理由同上。

12.以下代码的输出结果是

struct B
{

float f;
char p;
int adf[3];

};
printf("%d",sizeof(B));
解析:

float f 占 4 个字节,char p 占 1 个字节,int adf[3]占 12 个字节,总共是 17 个字节。根据

内存对齐原则,要选择

4 的倍数,所以是 20 个字节。

13.内联函数和宏的差别是什么?

答案:内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译
的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。内联函数要做参
数类型检查,这是内联函数跟宏相比的优势。

inline 一般只用于如下情况:
(1)一个函数不断被重复调用。
(2)函数只有简单的几行,且函数内不包含 for,while,switch 语句。

13.指针和引用的差别?

答案:

(1)非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对

象。但指针可以置空值,不指向任何对象。