在C中,将int放入int指针会导致运行时错误。

在C中,将int放入int指针会导致运行时错误。,c,pointers,C,Pointers,以下代码在ideone中运行良好,但在IDE代码块中出现运行时错误。我的IDE是否已损坏,或者是否存在任何特定于编程语言的问题 #include<stdio.h> int main(){ int *pointer; int num = 45; *pointer = num; printf("pointer points to value %d", *pointer); return 0; } #包括 int main(){ int*指针;

以下代码在ideone中运行良好,但在IDE代码块中出现运行时错误。我的IDE是否已损坏,或者是否存在任何特定于编程语言的问题

#include<stdio.h>

int main(){
    int *pointer;
    int num = 45;
    *pointer = num;
    printf("pointer points to value %d", *pointer);
    return 0;
}
#包括
int main(){
int*指针;
int num=45;
*指针=num;
printf(“指针指向值%d”,*指针);
返回0;
}
更换此

*pointer = num;

在赋值之前,指针应该指向内存空间

以这种方式定义指针时:

int *pointer;
这意味着您已经定义了指针,但指针尚未指向内存空间。如果您直接使用指针而不将其指向内存空间(就像您在代码中所做的那样),那么您将获得未定义的行为

将指针指向amemory空间可以通过以下方法之一完成:

1) 指向静态内存

int num;
int *pointer = &num;
num是一个定义为静态的int。因此指针可以指向num内存

2) 指向动态内存

int *pointer = malloc(sizeof(int));

指针可以指向动态内存。动态内存可以用
malloc()
分配,当内存变得无用时,我们可以用
free(pointer)
将num的地址分配给指针,因为指针应该持有地址而不是值。您可以阅读有关指针的更多信息

通过指针更改变量的值

*pointer = 11;

首先,u应该初始化它试图指向的指针,然后使用它修改指向的值..as

pointer=&num;

现在,使用指针更改或访问其指向的值。

首先,您已通过“int*pointer”定义了指针

然后,尝试使用“*pointer=num”实现间接访问——将num的值分配给指针“pointer”所指向的内存空间

好的,问题来了!在代码中,您只定义了一个指针,但并没有使它指向内存空间。不这样做而进行间接访问是非常危险的。因此,您可以看到运行时错误

现在,您应该在代码中添加“int-value;pointer=&value;”。它将使指针“指针”指向“值”。您可以通过间接访问“*pointer=num”将“num”分配给“value”

我认为,在研究指针时,应该区分定义和间接访问


我是一个英语很差的人。这是我关于堆栈溢出的第一个答案。我希望我的回答能帮助你。谢谢。

指针
是未初始化的指针;您没有分配任何内存。请不要忘记
\n
格式字符串末尾的
\n
。@JensGustedt我应该总是在格式字符串末尾使用\n吗?(我是初学者,在C语言中几乎没有编程经验。)@Nikunbanka不总是,但通常是这样。通常,您将知道何时不希望换行结束输出;如果你不确定你不想要一本,用换行符。你在读哪本书?您需要使指针指向某个对象,然后才能更改该对象的值。很遗憾,您这样区分动态内存和静态内存,因为
static
是存储类说明符,
num
具有自动存储。不过,我不知道如何更好地表达它。
*pointer = 11;
pointer=&num;