gpt4 book ai didi

c - "int *path"和 "int path[]"之间有什么区别吗?

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

Possible Duplicate:
Similarities and differences between arrays and pointers through a practical example

我曾经将它们视为相同的数组名称。但是现在我遇到了一个错误,就是当我使用int *path时并尝试访问数组的成员,编译器得到一个 SIGSEGV(我从来不记得在我之前编写的代码中发生过),但是当我使用 int path[] 时就可以了.

那么为什么我在使用 int *path 时收到 SIGSEGV ?

最佳答案

只是猜测您正在尝试写入已以两种可能但不等效的方式声明的数组:

    int *path = { 4, 5, 3, -1}; /* you're saying this does not work ... when? */
// ^ compiler "warning" (error) expected, see edit below
path[2] = 1; /* .. when you try this */

但是

    int path[] = { 4, 5, 3, -1};
path[2] = 1; /* but this works */

在第一种情况下,路径是指向放置在某处的“静态”“列表”的指针。您只有指向它的指针,可以读取内容,但如果您尝试在其上写入,则可能会出现段错误。 (可能因为这些数据可能位于您可以写入的内存中,即使经常发生您不能写入的情况,但这取决于系统)。

在第二种情况下,堆栈上的一个区域被保留,足够大以容纳数据,然后将数据复制到该区域中。在这种情况下,您既可以读取也可以写入。

编辑

正如评论中所注意到的,第一个示例给出了警告,您将需要一个强制转换(int [])来编译而不发出警告。然后,让我们假设该数组是在无法写入的地方创建的,尽管事实并非如此。

关于c - "int *path"和 "int path[]"之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13697203/

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