A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CesC 中级黑马   /  2015-7-21 22:59  /  1404 人查看  /  14 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

1. char * const p;
  char const * p
  const char *p

  上述三个有什么区别?

  char * const p; //常量指针,p的值不可以修改
  char const * p;//指向常量的指针,指向的常量值不可以改
  const char *p; //和char const *p
------------------------------------------------------
2. char str1[] = "abc";
  char str2[] = "abc";

  const char str3[] = "abc";
  const char str4[] = "abc";

  const char *str5 = "abc";
  const char *str6 = "abc";

  char *str7 = "abc";
  char *str8 = "abc";

  cout << ( str1 == str2 ) << endl;
  cout << ( str3 == str4 ) << endl;
  cout << ( str5 == str6 ) << endl;

  cout << ( str7 == str8 ) << endl;

   打印结果是什么?


解答:结果是:0 0 1 1
str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域
-----------------------------------------------
3. 以下代码中的两个sizeof用法有问题吗?

  void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
  {
      for( size_t i=0; i<sizeof(str) sizeof(str[0]);="" ++i="" )
         if( 'a'<=str && str<='z' )
           str -= ('a'-'A' );
  }

  char str[] = "aBcDe";
  cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
  UpperCase( str );
  cout << str << endl;

答:函数内的sizeof有问题。
根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,因此其大小为6,
函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

14 个回复

倒序浏览
收藏再说
回复 使用道具 举报
楼主你这代码是C++的啊
回复 使用道具 举报
感谢分享
回复 使用道具 举报
太棒了 亲  赞一个
回复 使用道具 举报
收藏一下
回复 使用道具 举报
timehzy 发表于 2015-7-21 23:21
楼主你这代码是C++的啊

学习不要只学一点半点,要全面学习。说是C语言面试题,难道考官考你C++你要反驳没学过?
回复 使用道具 举报
294250051 发表于 2015-8-8 10:59
学习不要只学一点半点,要全面学习。说是C语言面试题,难道考官考你C++你要反驳没学过? ...

您说的有道理,多学点东西总没有坏处,谢谢
回复 使用道具 举报
ljk-tt 中级黑马 2015-8-18 21:17:59
9#
感谢分享
回复 使用道具 举报
你写的太好了受益啦,谢谢
回复 使用道具 举报
xiaohu90 来自手机 中级黑马 2015-8-19 10:37:06
11#
收藏备用来自: iPhone客户端
回复 使用道具 举报
有用。。。。
回复 使用道具 举报
赞一个~!!!!收藏了
回复 使用道具 举报
面试有用,赞一个啦,,,
回复 使用道具 举报
赞一下下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马