1.说明:sizeof()是一个单目运算符,计算数据类型所占用的内存字节数(一个字符占一个字节)运算对象为数据类型符和变量,结果类型为整型,右结合。
2.注意区分:★(!系统在存储字符串常量时,会在字符串末尾自动加上一个结束标志符\0,所以无须人为添加,字符结束标志符\0也要在字符数组中占用一个元素的存储空间,即1字节,因此在说明字符数组长度时,至少为字符串所需长度加1)
- sizeof()运算符:遇到/0结束,所以会多统计一个结尾的空字符\0,n个字符的长度是n+1个)
- strlen()函数:求字符串的实际长度,只适用于字符串,不包括空字符 '\0'
3.题目:
设char str[10]=“Computer”;
执行printf ("%dn",sizeof (str) ) ;后输出结果是 ?
- 分析:sizeof (str)→测量str数组大小
- 但定义一维数组时字节是char str[10],大小为1*10=10
4.题目:
设struct { short A; char B; float C; }cs; 则sizeof(cs)的值是?
- 解析:short A=2,char B=1,float C=4
- 三者之和是:2+1+4=7
5.题目:sizeof(double)是int类型表达式
- 分析:sizeof()的结果类型为整型
6.题目:
设typedef struct
{ int a; char s[10]; }TYPE; TYPE u1; 则printf("%dn",sizeof(u1)); 的输出结果是 ?
- 分析:sizeof(u1)中包含 int a和char s[10]
- int a=2个字节
- char s[10]=10
- 结果为2+10=12
7.题目:
若定义了union { char a[10]; short b[4][5]; long c[5]; }u; 则执行printf("%d\n",sizeof(u))语句的输出结果是 ?
- 分析:union共用体,多个成员共用一块内存,编译时会选取成员中长度最长的来声明!
- sizeof(u)中包含char a[10]和short b[4][5]和long c[5]
- 其中char a[10]占用1*10=10个字节
- short b[4][5]占用2*(4*5)=40个字节
- long c[5]占用4*5=20个字节
- 所以最长的为40
8.题目:设char s[]="BeijingChina";
执行语句printf("%d,%d\n",strlen(s),sizeof(s));后输出结果是?
- 分析:strlen(s)=12
- sizeof(s)=12+1=13
9.题目:设char s[]="China";
执行语句printf("%d,%d\n",sizeof(s),strlen(s));后输出结果是 ?
- 分析:sizeof(s)=5+1=6
- strlen(s)=5
10.题目:设struct student {char name[10]; char sex;}stu;
则sizeof(stu)的值是?(stu是结构体变量,所占用的字节数为所有成员字节数之和)
- 分析:sizeof(stu)中包括:char name[10]和char sex
- 其中char name[10]=1*10=10
- char sex=1
- 结果为10+1=11
11.题目:设 char *p="abc\0def";
则执行语句 printf("%d",sizeof(p));后输出结果是 ?
- 分析:程序只执行到abc\0
- 因为遇到\0结束运行
- abc\0 一共四个字节
12.题目:设char p[]="abc\ndef"
则执行语句printf("%d",sizeof(p));后输出结果是?
- 分析:abc三个
- \n转义字符第四个
- def伍六七
- 在字符串末尾自动加上一个结束标志符\0
- 一共是8个
13.题目:
设struct student { char name[20]; char sex; }stu; 语句printf("%d\n",sizeof(stu));的输出结果是?
- 分析:sizeof(stu)中包括char name[20]和char sex;
- 其中char name[20]=1*20=20
- char sex=1
- 一共是20+1=21
14.题目:
设 union{ int i; char j[10];float k; }u; 则sizeof(u)的值是?
- 分析:sizeof(u)中包括int i和char j[10]和float k
- union共用体,多个成员共用一块内存,编译时会选取成员中长度最长的来声明!
- 所以char j[10]=1*10=10为最长
15.题目:设char s[]="\1234";
执行语句printf("%d,%d\n",sizeof(s),strlen(s));后输出结果是?
- 分析:\是转义字符反斜杠占1个
- sizeof(s)=5+1=6
- strlen(s)=5