zoukankan      html  css  js  c++  java
  • C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题

    一道容易出错的C++笔试题

    求下面代码的输出内容:

    int main(int argc,char* argv[])
    {
    	char str1[]="Hello";
    	char* str2="World";
    	cout<<sizeof(str1)<<endl
    		<<sizeof(str2)<<endl;
    	return 0;
    )
    

    解析:

    str1指向的是字符串 "Hello" 的首地址,但 str1 同时也是一个字符数组的首地址,而这个字符数组包含了字符串 "Hello" 末尾的 '',所以 sizeof(str1) 的值为 strlen(str1)+1 , 为6。
    有人就会自然而然地认为 sizeof(str2)= strlen(str2)+1,认为结果为6。 输出应为:

    6
    6
    

    其实不然。
    str1 代表了一个字符数组的首地址,但是,str1 并非一个变量,甚至可以认为它是一个宏,代表了 ['H','e','l','l','o',''] 这个字符数组的地址。或者说 str1 就是一个立即数,而不是一个左值。
    而 str2 则是一个 (char*) 型的变量,是一个左值。 目前在32位和64位系统中,在Visual Studio 中测试,只有 double 和 long long 型的变量是 8 个字节的,其它的基本类型变量的大小都是在 4 个及以下字节的,包括各类指针。所以,sizeof(str2) 的值为 4。
    上面代码的正确输出为:

    6
    4
  • 相关阅读:
    LA 3135 优先队列
    uva 11991 查询中容器的运用
    uva 11995 判别数据类型
    LA 4973异面线段
    LA 2797 平面区域dfs
    LA 2218 半平面交
    poj 3525 求凸包的最大内切圆
    poj 1031 多边形对点(向周围发射光线)的覆盖
    poj 1269 直线间的关系
    kotlin学习笔记-异常好玩的list集合总结
  • 原文地址:https://www.cnblogs.com/dongling/p/5893671.html
Copyright © 2011-2022 走看看