第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 不解释了