h5681901 发表于 2021-2-10 20:32:59

NULL指针不段落报错是什么原因

上玩viod指针和NULL指针的课程之后敲的代码如下:
#include<stdio.h>
int main(){
        int *p;
        int *p1=NULL;
        printf("p=%d\n",p);
        printf("p1=%d",p1);
        return 0;
}

运行结果为: p=0,p1=0

为什么我的NULL指针不会报错,直接输出为0呢?
大佬求解

wp231957 发表于 2021-2-10 20:39:31

NULL就是0

h5681901 发表于 2021-2-10 20:41:33

wp231957 发表于 2021-2-10 20:39
NULL就是0

上了小甲鱼的课,他那显示Segmentation fault,没显示=0。这又是什么原因

李京 发表于 2021-2-10 21:17:52

h5681901 发表于 2021-2-10 20:41
上了小甲鱼的课,他那显示Segmentation fault,没显示=0。这又是什么原因

他应该是对p1 解引用*

#include<stdio.h>
int main(){
      int *p;
      int *p1=NULL;
      printf("p=%d\n",p);
      printf("p1=%d",*p1);//对void * 类型进行 * 就会报错
      return 0;
}

一叶枫残 发表于 2021-2-10 23:48:13

在stdio.h里有宏定义
#define NULL 0
即NULL = 0

h5681901 发表于 2021-2-11 09:07:15

李京 发表于 2021-2-10 21:17
他应该是对p1 解引用*

我的dvec++解引用运行的话就显示上一条,p1啥也不显示

Minecraft程序猿 发表于 2021-2-11 12:39:46

h5681901 发表于 2021-2-10 20:41
上了小甲鱼的课,他那显示Segmentation fault,没显示=0。这又是什么原因

段内存溢出

Minecraft程序猿 发表于 2021-2-11 12:40:45

一叶枫残 发表于 2021-2-10 23:48
在stdio.h里有宏定义

即NULL = 0

#define NULL (void *(0))

一叶枫残 发表于 2021-2-11 15:35:32

Minecraft程序猿 发表于 2021-2-11 12:40

#define NULL (void *(0))
这两个都行,你用if判断都有一样的结果

Minecraft程序猿 发表于 2021-2-11 16:28:05

一叶枫残 发表于 2021-2-11 15:35
#define NULL (void *(0))
这两个都行,你用if判断都有一样的结果

是吗(O)

小破竹林 发表于 2021-2-11 18:06:54

NULL指针是空指针,C语言里定义为(void*)0

h5681901 发表于 2021-2-11 19:52:34

Minecraft程序猿 发表于 2021-2-11 12:39
段内存溢出

那为什么Dev-C++不显示这个段内存溢出而回显示=0啊,求解

永恒的蓝色梦想 发表于 2021-2-11 21:25:28

h5681901 发表于 2021-2-11 19:52
那为什么Dev-C++不显示这个段内存溢出而回显示=0啊,求解

段错误是因为你尝试访问0地址, 打印只是把0打印出来, 怎么会报错?

Minecraft程序猿 发表于 2021-2-11 21:35:22

h5681901 发表于 2021-2-11 19:52
那为什么Dev-C++不显示这个段内存溢出而回显示=0啊,求解

你在初始化时指定为NULL,也就是(void *(0)),0
页: [1]
查看完整版本: NULL指针不段落报错是什么原因