You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中用箭头运算符获取数组长度无输出,循环却正常终止?

你的代码问题解析:箭头运算符误用与数组长度的误解

核心误解:箭头运算符->在这里的作用

数组名cars在表达式中会自动退化为指向数组第一个元素的指针,所以cars->length()等价于(*cars).length()——也就是调用数组第一个string元素(cars[0],值为"Corvette")的length()方法,返回的是这个字符串的长度(8),完全不是数组的元素个数。这是你所有困惑的根源。

为什么循环看起来“正常终止”?

你的循环条件是i < cars->length(),也就是i < 8,但你的数组只有3个元素。当i >=3时,cars[i]属于数组越界访问,这是C++中的未定义行为——你的程序运行时没崩溃只是巧合,越界访问的内存区域可能刚好没有触发错误,但这种写法绝对错误,随时可能导致程序崩溃或输出乱码。

关于cars->length()输出为空的疑问

理论上cars->length()返回的是size_t类型的数字8,cout应该输出8。如果你的运行结果为空,大概率是运行环境异常或者你看错了输出。你可以单独打印cars[0].length(),结果会和cars->length()完全一致。

正确的数组遍历写法

要获取静态数组的元素个数,正确的方式是sizeof(cars)/sizeof(cars[0]),C++11及以后也可以用std::size(cars)(需要包含<iterator>头文件)。修改后的循环如下:

for (int i = 0; i < sizeof(cars)/sizeof(cars[0]); i++)
{
    cout << cars[i] << '\n';
}

额外的逗号运算符问题

你代码里的cars[1] = "Camaro", "Ford";是逗号运算符的误用:逗号运算符会依次执行左右表达式,但这里只有cars[1] = "Camaro"生效,后面的"Ford"没有任何作用。如果想给cars[1]赋值为"Ford",直接写cars[1] = "Ford";即可。

内容的提问来源于stack exchange,提问作者Christian Cangelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:35:34