几道面试题

博客给出了几道面试题及参考答案。题目涉及变量运算、指针操作、数组遍历和函数作用判断等内容,如计算变量i、j的值,指针运算结果,数组元素变化情况,以及判断函数为字符串拷贝函数等,并对答案进行了详细推理分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我起了个新标题,只是不想再贴一次了,所以整个拷过来,
给大家参考一下,并无要引起大家注意的意思。 谢谢!


发信人: ReAKiNg (ReAKiNg), 信区: Office
标 题: Re: 几道面试题
发信站: 鼓浪听涛 (Fri Nov 16 17:19:03 2001), 转信

faint...还是把理由给了算了。


【 在 ReAKiNg (ReAKiNg) 的大作中提到: 】
: 有一点点难度。 我做了一份参考答案,理由暂时不忙给。
: 【 在 tsky (sky) 的大作中提到: 】
: : 发信站: 饮水思源 (2001年11月16日11:53:18 星期五), 转信
: : 1。int i=5,j;
: : j=(++i)*(i--);
: : 运行后i=_______,j=_________
: i == 5; j == 36;

我们知道++i先算++i在参与表达式运算,而i--恰好相反。
原式相当于(j=(++i)*i)&&(i--)
(j==6*6)&&(i==6-1)

: : 2。 int a[] = {0,1,2,3,4};
: : int *p[] = {a,a+1,a+2,a+3};
: : int **pp = p;
: : 假设a=8239150(记不清了,大概吧),p=8239168
: : *(pp++)-a = ?
: 2

第三行告诉我们pp = p;
所以pp++相当于p++;
而p++相当于p+1;相当于&p[1];
所以*(pp++)相当于*(&p[1]);相当于p[1];
p[1]等于多少? 等于a+1;
所以原式等价于(a+1)-a;
考虑到a和a+1是整形地址,占2字节的空间;
所以答案为2。

: : 3。int a[100],i,*p=a;
: : for(i=0;i<100;i++) a[i]=i;
: : for(i=0;i<100;i++)
: : {
: : *p=a[i];
: : g(&p);
: : };
: : for(i=0;i<100;i++)
: : {
: : printf("%d",a[i]);
: : };
: : void g(int **p);
: : {
: : **p++;
: : *p++;
: : }
: 991234567...99
: 即a[0]==99;a[i]=i; 其中1<=i<=99;

++优先级高于*,所以*p++相当于*(p++);
所以函数void g(int **p)的唯一作用是p自增(p++)两次;
不对实参指向的内容造成任何影响。
在main()函数的循环中,当i==99时,*p==a[0]==a[99]==99;
其他a[i]没有任何变化。
所以答案就是上面我说的。

: : 4。下面函数的作用:
: : fun(char *a,char *b)
: : {
: : while (*a++=*b++)
: : {};
: : return;
: : }
: 字符串拷贝函数。

这题简单的要命,不到2秒钟就知道是怎么回事了。
*a++相当于*(a++),所以原式相当于(*(a++))=(*(b++));
一个一个字符拷贝。
循环终止的条件是*a == '\0'即*b == '\0';
是字符串拷贝函数还不明显吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值