黑马程序员技术交流社区

标题: 关于c指针的一个陷阱题,网上看到的被虐了 [打印本页]

作者: Devchen    时间: 2014-7-9 00:01
标题: 关于c指针的一个陷阱题,网上看到的被虐了
最近一致在看些C方面的题,这个题求输出,分析也看了,就是不了解深拷贝和浅拷贝是什么东东,求解
  1.         #include <stdio.h>
  2.         int main{
  3.     char str1[] = "abc";
  4.     char str2[] = "abc";
  5.    
  6.     const char str3[] = "abc";
  7.     const char str4[] = "abc";
  8.    
  9.     const char *str5 = "abc";
  10.     const char *str6 = "abc";
  11.    
  12.     char *str7 = "abc";
  13.     char *str8 = "abc";
  14.    
  15.     if ( str1 == str2 ) printf("1\n");
  16.     if ( str3 == str4 ) printf("2\n");
  17.     if ( str5 == str6 ) printf("3\n");
  18.     if ( str7 == str8 ) printf("4\n");

  19.     return 0;
  20.         }
复制代码


作者: Devchen    时间: 2014-7-9 00:20
代码发出来怎么看着不整洁那?
作者: fantacyleo    时间: 2014-7-9 00:59
输出3和4。这就是考察数组名和指针变量的含义,深复制浅复制是扯远了。数组名是标识数组首元素地址的指针常量。str1和str2是不同的数组,首元素地址当然不一样。指针变量的值是一个内存地址。像"abc"这种字符串常量是放在一个固定的内存位置的,你无论创建多少个指针变量去指向它,都是指向同一个地址,也就是说这些指针变量的值都是一样的。

至于const,在这道题中是无关紧要的。const只是说这个变量只能被赋值一次,之后就不能再改变值了。
作者: chain    时间: 2014-7-9 01:08
我觉得应该是输出2,3,4
作者: 幕夏    时间: 2014-7-9 01:27
同意2楼, 输出3和4




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2