C语言中,定义一个指针的时候为这个指针开辟存储空间吗?

比如:int *p;
这个时候指针指向哪?是指向空?还是系统会为指针开辟一个整型的存储空间,然后让p指向这个地址?
如果是指向空,那为什么定义了一个指针之后,可以直接*p=5呢?难道是在赋值的时候开辟空间吗?
如果是在定义指针的时候系统就为这个指针开辟了一个存储空间,那如果int *p;了之后,让p=&a;就是让指针指向另外一个变量的地址,那它原来开辟的内存空间并没有释放,岂不是为造成内在泄露吗?难道是在让指针指向其他变量地址的时候自动释放的吗?那如果p=&a;p=&b;那岂不是a也会被释放吗?
纠结啊,有没有权威的回答。

int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值,声明p为指向整型数的指针,这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。

用户说的“直接*p=5”,那么就会在一个无法预知的内存地址写入一个整型数5。这是不允许的,可能导致程序崩溃。

p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。

扩展资料:

指针:

指针的表现形式是地址,核心是指向关系指针,运算符“*”的作用是按照指向关系访问所指向的对象.如果存在A指向B的指向关系,则A是B的地址,“*A”表示通过这个指向关系间接访问B。

如果B的值也是一个指针,它指向C,则B是C的地址,“*B”表示间接访问C,如果C是整型、实型或者结构体等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针,称为一级指针,用于存放一级指针的变量称为一级指针变量。

参考资料来源:百度百科-二级指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-13

Int*p:第一级指针,表示p点所在地址是一个100Int类型的值,p被声明为一个指向整数的指针,并且为这个指针分配了存储空间。但在这种情况下,它是一个随机数,我们称之为指向一个不确定的内存地址。

当用户说“direct*p=5”时,在一个不可预知的内存地址上写入一个整数5。这是不允许的,并可能导致程序崩溃。

P = & a;然后,将现有变量a的地址写入指针p,我们说指向a的指针可以通过变量p对变量a进行正常操作。

扩展资料:

指针:

指针的表示法是地址,核心是指向关系的指针,操作符“*”的作用是根据关系访问所指向的对象。如果版本与B有指向关系,则A为B的地址,“*A”表示通过该指向关系间接访问B。

如果B的值是一个指针,它指向C,BC地址,间接访问,CB“*”如果C是整数,真实的,或结构,如类型变量或数组元素对于这些类型的数据,BC(即地址)是通用的指针,即主要指的是右边的针,持有一级指针变量指针变量。

本回答被网友采纳
第2个回答  推荐于2017-09-05
内存都是用地址编好了每一”格“的,一个地址对应一“格”,定义一个指针时,系统为指针随机赋一个内存大小范围内的地址,所以该指针肯定指向内存的某一“格”。如果没对指针进行赋值便使用(如p->next之类的),一般情况下在windows中运行时会提示非法访问内存,然后程序崩溃(调试时经常出现的情况),如果其他操作系统没有这样保护的话,可以使得指针任意访问内存,这是非常危险的,所以尽量别出现野指针。
1、因为定义的指针已指向一个地址,所以可以*p=5;
2、定义指针时并不是开辟内存空间,指定指针类型主要是为了在 *p 访问指针指向内容时可以确定怎样读取这块连续的内存(例如int与long所占的字节是不同的)本回答被提问者采纳
第3个回答  2012-08-07
呵呵,这个问题不会太纠结:
在定义 int *p 时,系统随机给p一个值,其对应内存中一处空间,并非为空(不信可以自己试试,当你不对p赋值时打印*p,这是有输出的);
让p = &a; 这是为p 赋初值,让p指向程序员指定的地址(之前是随机的,非为程序员指定的),它原来的内存空间仍然存在,且这不涉及释放不释放的问题(只在动态申请时存在释放的问题);
不知我说的是否清楚,O(∩_∩)O~本回答被网友采纳
第4个回答  2012-08-07
int *p; 声明p为指向整型数的指针,这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。
如果象你说的“直接*p=5”,那么就会在一个无法预知的内存地址写入一个整型数5。这是不允许的,可能导致程序崩溃。
p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。
相似回答