以下代码在 ideone 中运行良好,但在 codeblocks IDE 中出现运行时错误。我的 IDE 是否损坏或是否存在任何特定于编程语言的问题。
#include<stdio.h>
int main(){
int *pointer;
int num = 45;
*pointer = num;
printf("pointer points to value %d", *pointer);
return 0;
}
替换这个
*pointer = num;
经过
pointer = #
在为其赋值之前,您的指针应该指向一个内存空间。
当您以这种方式定义指针时:
int *pointer;
这意味着您已经定义了指针,但指针尚未指向内存空间。如果您直接使用指针而不将其指向内存空间(就像您在代码中所做的那样),那么您将获得未定义的行为。
将指针指向内存空间可以通过以下方式之一完成:
1) 指向一个静态内存
int num;
int *pointer = #
num 是一个定义为静态的 int。所以指针可以指向num内存
2)指向动态内存
int *pointer = malloc(sizeof(int));
指针可以指向动态内存。可以分配动态内存malloc()
,当内存变得无用时,我们可以释放内存free(pointer)
首先,您已经通过“int *pointer”定义了一个指针。
然后,尝试使用“*pointer = num”来实现间接访问——将num的值赋给指针“pointer”所指向的内存空间。
好的,问题来了!从你的代码中,你只定义了一个指针,但你没有让它指向一个内存空间。不这样做就进行间接访问是非常危险的。因此,您会看到运行时错误。
现在,您应该添加“int value;pointer = &value;” 到你的代码。它将使指针“指针”指向“值”。您可以通过间接访问“*pointer = num”将“num”分配给“value”。
在我看来,学习指针的时候应该区分定义和间接访问。
我是一个英语很差的人。这是我在堆栈溢出中的第一个答案。希望我的回答可以帮助到你。谢谢你。
首先你应该初始化它试图指向的指针,然后用它来修改指向的值..as...
pointer=#
现在使用指针来改变或访问它所指向的值。