网上整理的一些C++的笔试题(包括自己遇到的)

来源:互联网 发布:淘宝买隐形眼镜靠谱吗 编辑:程序博客网 时间:2024/06/02 05:41

问题:运行下图中C代码,输出的结果是什么?

int main(int argc, char* argv[]){    char str1[] = "hello world";    char str2[] = "hello world";     char* str3 = "hello world";    char* str4 = "hello world";     if(str1 == str2)        printf("str1 and str2 are same.\n");    else        printf("str1 and str2 are not same.\n");     if(str3 == str4)        printf("str3 and str4 are same.\n");    else        printf("str3 and str4 are not same.\n");     return 0;}
答案:输出两行。第一行是str1 and str2 are not same,第二行是str3 and str4 are same。

str1和str2是两个字符串数组。我们会为它们分配两个长度为12个字节的空间,并把"hello world"的内容分别拷贝到数组中去。这是两个初始地址不同的数组,因此比较str1和str2的值,会不相同。str3和str4是两个指针,我们无需为它们分配内存以存储字符串的内容,而只需要把它们指向"hello world“在内存中的地址就可以了。由于"hello world”是常量字符串,它在内存中只有一个拷贝,因此str3和str4指向的是同一个地址。因此比较str3和str4的值,会是相同的。

并且:

C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。

0 0
原创粉丝点击