今天有空了,分享一下我的思路
struct tmp{
int a;
char c;
short int l;
char b[6];
}
sizeof(tmp)=?
复制
这个题主要考察字节对齐(也叫内存对齐)
首先,我们先分析结构体前三个变量的内存,int型的a占4个字节,后面的c和l一起占4个字节,所以a,c,l一共就占了8个字节。然后就是char数组了,数组长度为6,6和前面的对齐之后应该是8,所以最终答案为16.
union{
int a;
char b[2];
}s;
s.b[0]=2;
s.b[1]=5;
s.a=?;
复制
这个题考察对联合体的理解
联合体是所有成员共用一段内存,我们先看打印结果
打印结果是502,这个是16进制的结果,便于分析,首先s.b[0]和s.b[1]分别对应s.a的低两位,低两位的表示为0x0502,高两位不变,所以s.a内存存取应该是0x000502.
char* getstr(){
char str[20];
for(int i=0;i<20;i++){
scanf("%c",&a[i]);
}
return str;
}
printf("%s\n",getstr());
复制
这里首先得区分一下指针函数和函数指针的区别,这个很明显是一个指针函数,返回值是一个指针,但是这个函数在编译的时候会有警告,因为返回的str是一个地址,不是指针。但这个题最终printf是能正常输出的。
顺便说一下指针函数和函数指针的差别,指针函数是一个返回值为指针的函数,本质上是函数,而函数指针本质上是一个指针,只是这个指针储存的是函数的地址。
文章转载自春哥的嵌入式小世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。