指针赋值与空间分配问题
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中的随机值被强行地改变(或者说破坏)了,这样做严重时将导致程序挂起或机器死机。
正确的做法应该是:
先声明一个一般变量,再声明一个指针变量,然后通过自然的赋值(将该变量的地址赋给指针),建立起对应关系。由于使用对应关系必须在建立具体的对应关系之后,因此只有这样做顺序才是合理的。
具体问题请看下面一段出错的代码:
int x =1;
int *px;
*px = x;
说明:
第一句声明并定义了一个整型变量x,系统在执行语句时为变量x分配了一个具体空间,并将这个名为x的具体空间赋值为1;
第二句中声明了一个整型指针变量px,具体过程是:系统为变量px分配一个具体的空间,该指针变量px指向一个整型存储空间(没指明是哪个具体的存储空间,即存储空间不确定,但知道是整型),由于指针没有指向一个具体空间,因此此时的指针还是悬挂着的,为无效指针。
第三句使用指针变量px,按其提示的地址去寻找对应的内容变量,再把x的值赋给该内容变量。但由于使用的是无效指针,用其无法找到一个具体(即确定)的存储空间,但赋值的操作却必须针对某个确定的空间进行,因此在这种情况下赋值操作无法进行。在具体的程序执行过程中,当程序执行到该语句时,便无法进行为*px赋值这一操作,从而导致程序出错,无法再继续执行程序。由于px指向的只是整型存储空间,是不具体(或不确定)的,准确说是px指向了一个内存地址,但是这个内存不是程序控制的,可能是个未利用的内存,或者是其他程序的内存,确切地说是一类空间,如果对*px进行强行赋值,程序执行时将强行确定指针px所指空间,那么px的值也随之被强行确定,也就是说地址空间px中的随机值被强行地改变(或者说破坏)了,这样做严重时将导致程序挂起或机器死机。
正确的做法应该是:
先声明一个一般变量,再声明一个指针变量,然后通过自然的赋值(将该变量的地址赋给指针),建立起对应关系。由于使用对应关系必须在建立具体的对应关系之后,因此只有这样做顺序才是合理的。
相关文章推荐
- 两个指针指向同一个由malloc分配的空间,free掉一个问题
- 常量指针运用, 指针和数组名的赋值,以及各自的内存空间问题 浅谈 !
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 3.定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打
- 指针在子函数中动态分配空间的问题及解决方法
- 44. 腾讯面试题: 使用函数的参数指针,分配内存空间问题
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- 指针,数组,连续开辟空间的地址分配和读取问题
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 3 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同
- 指针在子函数中分配空间若干问题
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- C语言中sizeof对数组和对指针操作的不同,以及sizeof中表达式赋值问题
- 结构体中指针赋值问题的分析及C代码示例
- 转:简单类型指针的与复杂类型指针定义以及分配的问题
- (2011.07.06)C++ 结构体中字符指针在main中使用new的赋值问题。
- 关于数组给指针赋值的问题