C++面试题求解

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:41:23
char *a = "hello";
char *b = "hello";
if(a= =b)
printf("YES");
else
printf("NO");
这个简单的面试题目,我选输出 no(对比的应该是指针地址吧),可在VC是YES 在C是NO
为什么C++中是YES?
我测试过了
的确是YES

应该是YES,
如果这么写:
char a[] = "hello";
char b[] = "hello";
答案是NO,因为指针指向的是栈区的地址,这个是随机的

现在指向的是常量区"hello"的地址,所以相同

不会吧,if(a= =b) 比较的是指针a,b的首地址 显然是不相等的,

我用的c++builder,输出也是no

应该是YES,
如果这么写:
char a[] = "hello";
char b[] = "hello";
答案是NO,因为指针指向的是栈区的地址,这个是随机的

现在指向的是常量区"hello"的地址,所以相同

正解

char *a = "hello";
char *b = "hello";
两条语句指向内存中同一个区域,指针a和指针b的地址相同。你可以用调试工具看一下。这是因为在给指针a和指针b初始化是,在内存中开辟了同一个常量区"hello",并把这个区域的地址给指针。