您的位置:首页 > 其它

指针赋值与空间分配问题

2014-05-01 09:25 197 查看
执行语句int *px;时系统是只为指针变量px分配一个具体空间,还是同时为px和其所指向的整型变量分配具体的存储空间? 

具体问题请看下面一段出错的代码:

int x =1;

int *px;

*px = x;

说明: 

第一句声明并定义了一个整型变量x,系统在执行语句时为变量x分配了一个具体空间,并将这个名为x的具体空间赋值为1;

第二句中声明了一个整型指针变量px,具体过程是:系统为变量px分配一个具体的空间,该指针变量px指向一个整型存储空间(没指明是哪个具体的存储空间,即存储空间不确定,但知道是整型),由于指针没有指向一个具体空间,因此此时的指针还是悬挂着的,为无效指针。

第三句使用指针变量px,按其提示的地址去寻找对应的内容变量,再把x的值赋给该内容变量。但由于使用的是无效指针,用其无法找到一个具体(即确定)的存储空间,但赋值的操作却必须针对某个确定的空间进行,因此在这种情况下赋值操作无法进行。在具体的程序执行过程中,当程序执行到该语句时,便无法进行为*px赋值这一操作,从而导致程序出错,无法再继续执行程序。由于px指向的只是整型存储空间,是不具体(或不确定)的,准确说是px指向了一个内存地址,但是这个内存不是程序控制的,可能是个未利用的内存,或者是其他程序的内存,确切地说是一类空间,如果对*px进行强行赋值,程序执行时将强行确定指针px所指空间,那么px的值也随之被强行确定,也就是说地址空间px中的随机值被强行地改变(或者说破坏)了,这样做严重时将导致程序挂起或机器死机。

正确的做法应该是:

先声明一个一般变量,再声明一个指针变量,然后通过自然的赋值(将该变量的地址赋给指针),建立起对应关系。由于使用对应关系必须在建立具体的对应关系之后,因此只有这样做顺序才是合理的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐