• 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
  • 相关阅读:
    vue动态改变样式
    前端上传到七牛云图片
    vue实现发送验证码60秒
    移动端使用lib-flexible
    作用域插槽
    vue中的keep-alive
    vue优化
    vue动画move的实现
    vue自带的动画效果
    v-model的理解
  • 原文地址:https://www.cnblogs.com/dongling/p/5893671.html
Copyright © 2020-2023  润新知