应聘C语言类工作职位面试题大汇总8Word下载.docx
《应聘C语言类工作职位面试题大汇总8Word下载.docx》由会员分享,可在线阅读,更多相关《应聘C语言类工作职位面试题大汇总8Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
1
int:
2/*该2位不能使用*/
intb:
3
intc:
2
};
从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。
二、位域的使用位域的使用和结构成员的使用相同,其一般形式为:
位域变量名?
位域名位域允许用各种格式输出。
main(){
1;
3;
4;
}bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
pri
改错:
#include
intmain(void){
int**p;
intarr[100];
p=&
arr;
return0;
解答:
搞错了,是指针类型不同,
//二级指针
&
//得到的是指向第一维为100的数组的指针
int**p,*q;
q=arr;
q;
下面这个程序执行后会有什么错误或者效果:
#defineMAX255
intmain()
unsignedcharA[MAX],i;
//i被定义为unsignedchar
for(i=0;
i<
=MAX;
i++)
A[i]=i;
死循环加数组越界访问(C/C++不进行数组越界检查)
MAX=255
数组A的下标范围为:
0..MAX-1,这是其一..
其二.当i循环到255时,循环内执行:
A[255]=255;
这句本身没有问题..但是返回for(i=0;
i++)语句时,
由于unsignedchar的取值范围在(0..255),i++以后i又为0了..无限循环下去.
structname1{
charstr;
shortx;
intnum;
structname2{
sizeof(structname1)=8,sizeof(structname2)=12
在第二个结构中,为保证num按四个字节对齐,char后必须留出3字节的空间;
同时为保证整个结构的自然对齐(这里是4字节对齐),在x后还要补齐2个字节,这样就是12字节。
intel:
A.c和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?
这两个static变量会保存到哪里(栈还是堆或者其他的)?
static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。
他们都放在数据区,但是编译器对他们的命名是不同的。
如果要使变量在其他模块也有意义的话,需要使用extern关键字。
structs1
inti:
8;
intj:
4;
3;
doubleb;
structs2
printf("
sizeof(s1)=%d\n"
sizeof(s1));
sizeof(s2)=%d\n"
sizeof(s2));
result:
16,24
第一个structs1
理论上是这样的,首先是i在相对0的位置,占8位一个字节,然后,j就在相对一个字节的位置,由于一个位置的字节数是4位的倍数,因此不用对齐,就放在那里了,然后是a,要在3位的倍数关系的位置上,因此要移一位,在15位的位置上放下,目前总共是18位,折算过来是2字节2位的样子,由于double是8字节的,因此要在相对0要是8个字节的位置上放下,因此从18位开始到8个字节之间的位置被忽略,直接放在8字节的位置了,因此,总共是16字节。
第二个最后会对照是不是结构体内最大数据的倍数,不是的话,会补成是最大数据的倍数
1)读文件file1.txt的内容(例如):
12
34
56
输出到file2.txt:
(逆序)
2)输出和为一个给定整数的所有组合
例如n=5
5=1+4;
5=2+3(相加的数不能重复)
则输出
1,4;
2,3。
望高手赐教!
!
第一题,注意可增长数组的应用.
intmain(void)
intMAX=10;
int*a=(int*)malloc(MAX*sizeof(int));
int*b;
FILE*fp1;
FILE*fp2;
fp1=fopen("
a.txt"
"
r"
);
if(fp1==NULL)
{printf("
error1"
exit(-1);
fp2=fopen("
b.txt"
w"
if(fp2==NULL)
error2"
inti=0;
intj=0;
while(fscanf(fp1,"
%d"
&
a[i])!
=EOF)
i++;
j++;
if(i>
=MAX)
MAX=2*MAX;
b=(int*)realloc(a,MAX*sizeof(int));
if(b==NULL)
error3"
a=b;
for(;
--j>
=0;
)
fprintf(fp2,"
%d\n"
a[j]);
fclose(fp1);
fclose(fp2);
第二题.
unsignedlonginti,j,k;
pleaseinputthenumber\n"
scanf("
i);
if(i%2==0)
j=i/2;
else
j=i/2+1;
Theresultis\n"
for(k=0;
k<
j;
k++)
%d=%d+%d\n"
i,k,i-k);
voidmain()
unsignedlonginta,i=1;
a);
if(a%2==0)
for(i=1;
>
a,a-i);
=a/2;
%d,%d"
i,a-i);
兄弟,这样的题目若是做不出来实在是有些不应该,给你一个递规反向输出字符串的例子,可谓是反序的经典例程.
voidinverse(char*p)
if(*p=='
\0'
)
return;
inverse(p+1);
printf("
%c"
*p);
intmain(intargc,char*argv[])
inverse("
abc\0"
借签了楼上的“递规反向输出”
voidtest(FILE*fread,FILE*fwrite)
charbuf[1024]={0};
if(!
fgets(buf,sizeof(buf),fread))
test(fread,fwrite);
fputs(buf,fwrite);
FILE*fr=NULL;
FILE*fw=NULL;
fr=fopen("
data"
"
rb"
fw=fopen("
dataout"
wb"
test(fr,fw);
fclose(fr);
fclose(fw);
在对齐为4的情况下
structBBB
longnum;
char*name;
shortintdata;
charha;
shortba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
希望各位达人给出答案和原因,谢谢拉
假设在32位CPU上,
sizeof(long)=4bytes
sizeof(char*)=4bytes
sizeof(shortint)=sizeof(short)=2bytes
sizeof(char)=1bytes
由于是4字节对齐,
sizeof(structBBB)=sizeof(*p)
=4+4+2+1+1/*补齐*/+2*5+2/*补齐*/=24bytes(经Dev-C++验证)
=0x1000000+0x200*24