1、运行下图中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和str2是两个字符串数组。我们会为它们分配两个长度为12个字节的空间,并把"hello world"的内容分别拷贝到数组中去。这是两个初始地址不同的数组,因此比较str1和str2的值,会不相同。str3和str4是两个指针,我们无需为它们分配内存以存储字符串的内容,而只需要把它们指向"hello world“在内存中的地址就可以了。由于"hello world”是常量字符串,它在内存中只有一个拷贝,因此str3和str4指向的是同一个地址。因此比较str3和str4的值,会是相同的。
转自:http://zhedahht.blog.163.com/
2、运行下图中的C++代码,打印出的结果是什么?
int Fun1(char* str) { printf("%s\n", str); return 0; } int Fun2(char* str) { printf("%s\n", str); return 1; } int main(int argc, char ** argv[]) { int res1, res2; res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d")); res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d")); return res1 || res2; }
在计算rest2时,首先Func1(“a”)打印出内容为a的一行。由于Func1(“a”)返回false,和前面一样的道理,Func2(“b”)会略去不做计算。由于Fun1(“a”) && Func2(“b”)的结果是false,不管Fun1(“c”) && Func2(“d”)的结果是什么,整个表达式得到的结果都是false,因此Fun1(“c”) && Func2(“d”)都将被忽略。
3、
int SizeOf(char pString[]) { return sizeof(pString); } int main(int argc, char ** argv[]) { char* pString1 = "google"; int size1 = sizeof(pString1); int size2 = sizeof(*pString1); char pString2[100] = "google"; int size3 = sizeof(pString2); int size4 = SizeOf(pString2); printf("%d, %d, %d, %d", size1, size2, size3, size4); return 0; }
答案:4, 1, 100, 4。pString1是一个指针。在32位机器上,任意指针都占4个字节的空间。*pString1是字符串pString1的第一个字符。一个字符占一个字节。pString2是一个数组,sizeof(pString2)是求数组的大小。这个数组包含100个字符,因此大小是100个字节。而在函数SizeOf中,虽然传入的参数是一个字符数组,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。
4、以下size大小是:
std::string name1 = "youku"; const char* name2 = "youku"; char name3[] = {'y','o','u','k','u'}; size_t l1 = name1.size(); size_t l2 = strlen(name2); size_t l3 = sizeof(name2); size_t l4 = sizeof(name3); size_t l5 = strlen(name3);
答案:5,5,4,5,不确定
5、k为int类型,以下while循环执行的次数是:
unsigned int k = 20; while(k >= 0) --k;