gpt4 book ai didi

可以用指向整型数组来修改数组吗?

转载 作者:行者123 更新时间:2023-11-30 18:54:52 26 4
gpt4 key购买 nike

我正在编写这段代码来测试字符串文字和整数数组。我需要有人帮我检查并减轻我的负担。

1).

 char NUM[] = "ABC";
char *p_NUM=NUM;

NUM[0]='D';

puts(p_NUM);

return 0;

如果您从字符串文字创建数组,则可以修改它。

2).

 char *p_NUM="ABC";

p_NUM[0]='D';

puts(p_NUM);

return 0;

指向字符串文字的变量不能用于更改字符串的内容。所以这个会返回一个错误。

3).

 int NUM[] = {1, 2, 3};
int *p_NUM = NUM;

p_NUM[0]=4;

puts(p_NUM);
printf("%i\n",p_NUM);

int i;
for(i=0;i<4;i++)printf("%i",p_NUM[i]);


return 0;

puts(p_NUM);的结果和printf("%i\n",p_NUM);很有趣。我不知道为什么。

4).

int *p_NUM = { 1, 2, 3 };

p_NUM[0] = 4;

int i;
for (i = 0; i < 4; i++)
printf("%i", p_NUM[i]);

return 0;

这个编译器返回一个错误,这意味着指向整数数组不能用于修改数组,对吗?

5).

int NUM[] = { 1, 2, 3 }; int * p_NUM = NULL; // integer pointer

p_NUM = NUM; // integer pointer pointing to integer array

如果我这样写,是一样的吗?

int NUM[] = { 1, 2, 3 };
int * p_NUM = NUM; // integer pointer pointing to integer array

最佳答案

  1. char NUM[] = "ABC";

NUMchar 的数组s,初始化值为 "ABC" 。它位于可读写存储器中。它的大小为 4 ,包括空终止符。

<小时/>
  • char *p_NUM="ABC";
  • p是指向字符串文字 "ABC" 的指针。 "ABC"被放置在只读存储器中,因此无法修改。

    <小时/>
  • int NUM[] = {1, 2, 3};
  • 与第 1 点相同。整数数组。然而,通过说 for(i=0;i<4;i++) ,您正在运行超过分配的内存,创建 off-by-one错误又调用 undefined behaviour .

    您需要将循环条件更改为 for(i=0;i<3;i++)作为 C 中的数组索引从0开始.

    <小时/>
  • int *p_NUM = { 1, 2, 3 };
  • 无效。错误情况。 p_NUM 不是指向整数数组的指针。你的编译器应该已经有效地产生警告。在这种情况下,首先,大括号括起来的列表将被视为 p 的初始值设定项。 。它将产生双重警告

    4.1。 warning: initialization makes pointer from integer without a cast
    4.2. excess elements in scalar initializer

    你想要的是

    int NUM[] = { 1, 2, 3 };
    int * p_NUM = NULL; // integer pointer

    p_NUM = NUM; // integer pointer pointing to integer array

    p_NUM[0] = 4; //access array element thr' pointer and index

    int i;
    for (i = 0; i < 3; i++) //notice the change here
    printf("%i", p_NUM[i]);

    return 0;

    关于可以用指向整型数组来修改数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408868/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com