数组赋值无法使用指针语法

Array assignment not working with pointer syntax

本文关键字:指针 语法 赋值 数组      更新时间:2023-10-16
#include <iostream>
int main() {
    char* chars = new char[4];
    for(int i = 0; i < 4; ++i)
    {
        chars[i] = 'a';
    }
    std::cout << chars;
    return 0;
}

该代码块工作正常。 标准输出 说

aaaa

但是,改变

chars[i] = 'a';

*chars++ = 'a';

*(chars++) = 'a';

将标准输出设置为空,而 stderr 中没有任何内容。这是怎么回事?我认为 [] 只是 *指针的语法糖。

问题是通过使用*chars++ = 'a'遍历chars可以修改指针。 当您最终输出字符串时,它指向刚过字符串末尾的字符。

也许您正在尝试做这样的事情:

for( char *p = chars, *end = chars + 4; p != end; )
{
    *p++ = 'a';
}

但这很丑陋。 第一种方式(chars[i])更好。 无论哪种情况,数组都不够大,无法容纳 4 个字符的字符串,因为您需要一个 null 终止符。

char *chars = new char[5];
char *p = chars;
for( int i = 0; i < 4; i++ ) *p++ = 'a';
*p = '';                                    // null-terminate the string
cout << chars;
delete [] chars;

请注意,在您的案例中,动态分配没有太多用处。 为什么不直接在堆栈上声明字符? 此外,用全零初始化它并不是一个坏做法:

char chars[5] = {0};