大疆一道选择题
判断程序输出
#include<bits/stdc++.h>
using namespace std;
void Foo(char param[20]){
printf("%d\n", sizeof(param));
printf("%d\n", strlen(param));
}
int main()
{
// cout<<"Hello World";
char str1[] = "Hello\0dji";
char str2[] = {'H', 'e', 'l', 'l', 'o', '\0', 'd', 'j', 'i'};
printf("%d\n", sizeof(str1));
printf("%d\n", sizeof(str2));
Foo(str1);
// Foo(str2);
return 0;
}这道题目涉及到的知识点之前不太熟,就把题目记下来,64位机器上跑了一下。输出结果如下
10 9 8 5
题目要求是32位系统所以第三个数字位4,32位操作系统上指针大小4字节,64位上指针大小8字节。
str1会在末尾自动加一个'\0'表示结束,str2则不会。故sizeof输出10和9。
在Foo函数中,sizeof(param)输出指针大小,因为字符数组的名字也是一个指针,指向数组中的第一个字符
strlen函数在执行时遇到'\0'就认为字符串结束。
海康威视公司福利 1125人发布