设为首页 加入收藏

TOP

C面试题精选 (一)
2014-11-23 22:53:46 来源: 作者: 【 】 浏览:5
Tags:试题精选

1、运行下图中C代码,输出的结果是什么?


[cpp]
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;
}

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的值,会是相同的。

2、运行下图中的C++代码,打印出的结果是什么?


[cpp]
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;
}

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;
}
答案:打印出4行,分别是a、c、d、a。
在C/C++中,与、或运算是从左到右的顺序执行的。在计算rest1时,先计算Fun1(“a”) && Func2(“b”)。首先Func1(“a”)打印出内容为a的一行。由于Fun1(“a”)返回的是false, 无论Func2(“b”)的返回值是true还是false,Fun1(“a”) && Func2(“b”)的结果都是false。由于Func2(“b”)的结果无关重要,因此Func2(“b”)会略去而不做计算。接下来计算Fun1(“c”) || Func2(“d”),分别打印出内容c和d的两行。

在计算rest2时,首先Func1(“a”)打印出内容为a的一行。由于Func1(“a”)返回false,和前面一样的道理,Func2(“b”)会略去不做计算。由于Fun1(“a”) && Func2(“b”)的结果是false,不管Fun1(“c”) && Func2(“d”)的结果是什么,整个表达式得到的结果都是false,因此Fun1(“c”) && Func2(“d”)都将被忽略。

3、


[cpp]
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;
}

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是一个数组,s

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇多机调度问题(C语言实现)――贪.. 下一篇C/C++中调用api设置mysql连接的编..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: