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/