我有以下代码用于迭代创建的数组。但是,目前有一行显示出细分错误。
#include <stdio.h>
int main(){
int practice[] = {7, 2, 3, 3, 5};
int *ip;
int i = 0;
*ip = practice[0]; //this is the line giving me problems
for(; i < 5; ++i){
printf("%d ", *ip);
++ip;
}
printf("\n\n");
return 0;
}
当我将行从*ip = practice[0]
更改为ip = &(practice[0])
时,我注意到代码突然起作用了。我不确定为什么发生这种情况,因为第一行似乎和第二行一样合理。
答案 0 :(得分:4)
由于整数指针ip
未初始化,因此包含垃圾值。
现在,当您尝试通过*ip
对其进行取消引用并尝试为它所指向的内存位置分配一个值时,就会遇到分段错误。
在取消引用指针之前,您应该先分配一个有效地址。
int *ip;
ip = practice;
答案 1 :(得分:2)
这是怎么回事:
* ip =练习[0];
是您要为指针变量分配整数。
方括号是C语言访问实际数据的方式,而不是对其的引用。
现在,当您使用&符号(用于获取此数据的内存地址)时,这会将此数据的地址分配给您的变量,这正是您所期望的。 / p>
如果您希望使用指针而不是循环来遍历数组,则可以这样做:
ip = practice;
这会将数组中第一个元素的地址分配给您的 ip 变量,使您可以在循环内对其进行递增。