C语言面试题纠错集

第1题

void Func(char str_arg[100]){
    printf("%d\n", sizeof(str_arg));
}
int main(void){
    char str[] = "Hello";
    printf("%d\n", sizeof(str));
    printf("%d\n", strlen(str));
    char*p = str;
    printf("%d\n", sizeof(p));
    Func(str);
}

输出的是:6 5 4 4
解析:
char str[20]=“0123456789”;
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变

上面是对静态数组处理的结果,如果是对指针,结果就不一样了
char* ss = “0123456789”;
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,在32位机上,指针变量所占字节数为4
sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位’0’ 所占的内存空间,是char类型的,占了 1 位
strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen

c++中不允许隐式的数组拷贝,所以Func的参数会被隐式地转为char*,故为4;

note:若Func的原型为void Func(char (&str_arg) [6])(若不为6则调用出错),则结果为6.
第二题

x = 6;
x += x -= x * x;

X = -24?
解析:
自右向左
初始值:x=6;
xx=66;
x-=(xx) -> x=x-(xx)=6-36=-30;(此处改变了x的值)
x+=x ->x=x+x=-30±30=-60;

第三题

#include <stdio.h>
int main(void) {
    char *p[] = {"TENCENT", "CAMPUS", "RECRUITING"};
    char **pp[] = {p + 2, p + 1, p};
    char ***ppp = pp;
    printf("%s", **++ppp);
    printf("%s", *++*++ppp);
    return 0;
}

解析:
在这里插入图片描述
第四题:短路原理
设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a>b)&&(n=c>d)运算后,n的值为()
n = 2 不解释了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值