我在for
循环中使用指针时遇到问题。在我的for
循环初始化程序中,我取消引用一个int
指针并将其值设置为“ 0”。当我在循环中使用该取消引用的指针时,出现了段错误,并且我不明白为什么。我正在使用Code :: Blocks和C GNU GCC编译器。
看着观察窗口,我可以看到在for
循环过程中变量有一个随机数。
似乎已取消引用的指针在for
循环期间丢失了作用域。
代码:
#include <stdio.h>
int main(void)
{
int val = 0;
int *p = NULL;
int answer = 0;
p = &val;
*p = 1; // This dereferences and sets to one successfully
for (int i=3, (*p)=0 ; i>=0; i--) // Here *p is a random number
{
printf("do stuff");
(*p) += 1; // Here it causes a segmentation fault
}
answer = *p;
}
我认为以我的方式使用指针不会有问题。
在这里仔细看看:
for (int i=3, (*p)=0 ; i>=0; i--)
在您的第一部分中,for
您将定义一个名为的新指针变量p
,该变量会遮盖之前的p
定义并将其初始化为NULL。然后,您可以在导致段错误的循环中取消引用NULL指针。
不能同时具有变量定义和对现有变量的赋值,因此请将的赋值移动*p
到循环之前:
*p = 0;
for (int i=3; i>=0; i--)
或者,您可以i
在循环之外定义:
int i;
for (i=3, (*p)=0 ; i>=0; i--)
您可以通过滥用逗号运算符将它们压缩在一起:
for (int i=(*p=0,3) ; i>=0; i--)
这里的赋值是p
作为初始化的一部分发生的,i
因此它不会声明新变量。但是我不建议这样做,因为它会使您的代码更难以阅读和理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句