c - 使用指针/数组差异赋值

标签 c arrays pointers

<分区>

作为一个C初学者,对神奇的“指针”这个概念还是一头雾水

例如在数组"range1"中存储1到10的简单代码

int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    range1[count] = count;
    count++;
}
range1[count] = '\0';

这很好用,但是

int *range1;
int max = 10;
int count = 0;
range1 = malloc(sizeof(int) * (11));
while (count < max)
{
    *range1 = count;
    count++;
    range1++;
} 
range1[count] = '\0';

这个不是。我明白了

[1]    24934 segmentation fault

我很困惑,因为我认为 *(range1 + count) = range1[count]。

如何更改第二个示例,使其运行时不会产生分段违规。

最佳答案

使用

range1++;

不建议使用,除非您有另一个变量存储 malloc 返回的值。没有这样的变量,您将丢失原始指针。调用 free 会出问题。

另外,如果你继续使用

range1[11] = '\0';

在循环之后,您正在访问和修改内存中您不应该访问的位置。这会导致未定义的行为。

附言

使用

range1[11] = '\0';

即使您使用第一种方法访问 range1 的元素,也是一个问题。当您分配 11 个元素时,10 是最高有效索引。

关于c - 使用指针/数组差异赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51368745/

相关文章:

c - 在 C 中释放 malloc'd 二维数组时出现问题

c - 使用 typedef 构建结构 - C

c - 在 Windows 上迭代目录时查找句柄无效

java - 计算 ASCII 字符频率时出现 ArrayIndexOutOfBoundsException

c - 如果我传递一个变量的地址,我必须返回吗?

c - &"suchString"的返回值是多少?

c - fscanf 字符串(字符数组)从索引 1

Ruby:从哈希 A 到哈希 B 的最快路径

java - 如何将数组转换为 Json (Java)

c++ - 将指针转换为 int/将指针存储为类型 T