大疆一道选择题
判断程序输出
#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'就认为字符串结束。