作业帮 > 综合 > 作业

定义int *p;p=NULL和p=0还有p=‘\0’的意思一样么?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 01:54:50
定义int *p;p=NULL和p=0还有p=‘\0’的意思一样么?
那有没有*p=NULL和*p=0还有*p=‘\0’这些写法?
NULL ,0,'\0',这几种写法一样,值都是0
在很多编译器中#define NULL 0这样宏定义的都是给p的值赋值0,'\0'就是0,不过是以字符的形式,
因此他们是相同的
有*p=NULL,*p = 0,*p = '\0‘,这样的写法,不过他们的意思是说,给p这个指针指向的空间赋值为0
但是,不要先把p赋值为0,然后这样写,因为大多数编译器规定,内存为0的地方不能写操作,这是为了保护这个内存空间,因此只要不写在一块,都可以
这样写:
file1.c
#include
void main()
{
\x09int *p = &i;
\x09p = NULL;
\x09p = 0;
\x09p = '\0'
}
file2.c
#include
void main()
{
\x09int i = 23;
\x09int *p = &i;
\x09*p = NULL;
\x09*p = 0;
\x09*p = '\0';
}
再问: 我写p=NULL,然后输出*p,什么都没有,连0都没有。。。怎么回事?
再答: 哥们,你的p=NULL 只是把p的地址赋予0,不是给*p赋值为0 你看啊,你的地址是0,但是你输出的是*p,即p指向的空间的值,那怎么会有值呢, 您还要让*p=23; 这样就行了,很多时候把定义一个指针的p赋值为NULL是为了,防止它乱指向 不然会乱的, 但是你可以输出p的值是0,
再问: 哥们。。。还有问题。。。 #include void main() { int *p; p=NULL; *p=23; printf("%d,%d\n",p,*p); } 然后输出来还是啥都没。。。
再答: 同学,我说的不是你直接赋值,这样是不行的,我第一次给你写的,你再看看, 你现在把p的地址赋予0 0地址是不允许写的,因为操作系统和编译器保护着呢, 所以你看看我给你的那两个file1.c,file2.c 你要想给p的地址赋值0可以,但是不能,在它指的空间赋值 你要想给p指向的空间赋值可以,但是,它的地址不能是0 我上面故意把它们写成两个文件 你这个程序正好,又把它们放在了一块, 呵呵,其实这点没有必要,纠结,你是初学,其实给指针赋值为0 是很常见的,但是那都是为了防止,指着没有初始化,乱指向,后面的学习你会慢慢的明白的