指针的赋值和内存访问

来源:互联网 发布:python数据采集 pdf 编辑:程序博客网 时间:2024/05/22 12:56
#include <iostream>using namespace std;//关于指针的赋值和内存访问struct S{int i;int *p;};/************************************************************************//* 1. 指针可以被随意赋值,但是这样这个指针就毫无意义,这个指针指向未知内存,对该指针指向内存的任何操作都会报错,所以正确的方法是通过&变量来赋值;   2. 对一个指针可以进行下标运算[],但是一定要注意访问是否越界,对于数组比较容易判断,对于对象就要计算其偏移量是否已经超出了对象内存范围,若超出虽然在代码行不会报错,但是在该代码所在函数结束的时候就会造成栈崩溃,编译报错*//************************************************************************/int main(){int a[]={1,2};int *pa=a;pa[0]=10;pa[1]=20;//赋值没有问题,但是在函数结束的时候栈会崩溃,因为访问越界了pa[2]=30;int b=0;int *pb=&b;//同样也是访问越界倒置函数结束时栈崩溃pb[1]=10;int *pInt=(int *)0x1000;//可以向指针直接赋值,但是这样的指针毫无意义cout << pInt << endl;pInt++;cout << pInt << endl;//因为pInt指向垃圾(未知)内存,所以会Access Violation//cout << *pInt << endl;S s;int *p=&s.i;p[0]=4;p[1]=3;//访问拒绝,相当于访问内存地址为3的内存内容cout << *(s.p) << endl;//这样会函数结束时栈崩溃,因为访问超出了s对象内存范围p[2]=2;s.p=p;s.p[1]=1;s.p[0]=2;//相当于向内存地址为1的内存写入2,所以访存拒绝return 0;}