【问题标题】:Does changing an array copy data?更改数组会复制数据吗?
【发布时间】:2021-11-24 13:42:56
【问题描述】:

如果我定义了一个全局字符串数组,例如:

char* arr[] = {
    "abc",
    "def",
    "gh",
    NULL
};

然后我尝试更改 main() 函数中的第一个元素,例如:

arr[0]="something"

更改数组的元素会复制数据吗? 这是复制原始 arr[0] 还是?

【问题讨论】:

  • 这应该声明为const char*,因为你不能修改内容。

标签: arrays c string pointers


【解决方案1】:

基本上相当于这个:

char* arr[4];

arr[0] = "abc";
arr[1] = "def",
arr[2] = "gh",
arr[3] = NULL;

arr[0] = "something";

原始字符串“abc”保持不变,但也无法访问,除非您保存指向它的指针。所以这个:

arr[0] = "abc";
char *s = arr[0];
arr[0] = "something";
puts(s);

将打印“abc”;

【讨论】:

  • @Gerhardh 当然。谢谢。
【解决方案2】:

arr 的元素包含指向 cstrings 的指针,因为 arr 被声明为指向 char 的指针数组。元素本身实际上包含 cstrings。

因此,当您执行arr[0] = "something" 时,存储在arr[0] 的数据将被something 的地址覆盖。此时,abcsomething 各有一个实例,但是,您无法再使用arr[0] 访问abc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2016-06-27
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多