定义指针变量时候2种写法有什么区别int* p和int *p

2025-02-05 11:58:55
推荐回答(5个)
回答1:

int* p和int *p 写法没啥区别,不过我们习惯上用 int *p
下面我重点给你讲一下你的程序出错的原因吧!
int* p=NULL;在stdio.h头文件中就有对NULL的定义,它是一个符合常量,就是整数0.故该语句表示P初始时不指向任一有用的单元。所以如果你想用语句*p=5; 给P所指单元赋值的话,可以先定义一个int型的变量如a,然后让p再指向a(即p=&a;),这样你的程序就OK啦!
再有一种麻烦点的改正方法,就是使用分配内存空间函数malloc,其调用形式是:
(类型说明符*)malloc(size)
其功能是:在内存的动态存储区中分配一块长度为“size"字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)表示把返回值强制转换为该类型指针,“size"是一个无符号整数。

回答2:

这两种写法的功能没有区别。
这个程序出错是因为你没有为p分配空间,所以5就无处可放,所以出错:

#include
#include
int main()
{
int* p=NULL;
p=malloc(sizeof(int));/*为p分配可以存放一个int变量的空间*/
*p=5;

printf("%d\n\n",*p);
free(p);/*释放为p分配的内存*/
return 0;

}

------------------------------------------

附:网友“loveqzl”的说法是不正确的,这两种写法的作用是一样的,只不过第一种用法会使程序员产生一种错觉,错误地认为int*是一种数据类型,这种认识就会使其写出类似“int* a,b”这样的指针定义语句,但是这样做,b就不是一个指针,而是一个int变量

******************************************

80407003

回答3:

没有区别
int* p 是C++写法
int *p 是C写法

int *p;
只是一个指针 你没有用他指向任何地址的时候不能附值
比如:
int q;
p = &q;
*p =5;
就没问题了

连续声明多个指针的两种写法
int* a;
int* b;
or
int *a,*b;
(参见c++primer p102)

回答4:

汗,int* p和int *p
简直是两个事情啊!
一个是声明都错了,
第二个才是正确声明:-)

回答5:

这两种定义方法是一样的吧
printf("%d\n\n",*p)应该是printf("%d\n\n",&p);