初识指针的学习总结(1)

来源:互联网 发布:淘宝店铺动态怎么看 编辑:程序博客网 时间:2024/05/21 09:56

一.指针里的基本符号,结合例子解释

int a=6;

int* p_a;

//" * "相当于一个类型变量,可理解为把一个硬币翻了面。(用《C++primer plus》的话来说,p_a是指针,*p_a是变量a)

//int 指的是p_a只能是一个整型(即a)的指针;

//在这里指出p_a的类型是指针(上面a的类型是int),现在创建了一个新的变量——"int *"(指向Int类型的指针)

//内存需要给p_a分配一个内存。


p_a=&a;//“ & ”是一个获取地址的运算符,此时p_a里存储的是a的地址;

cout << a << endl;//输出6;
cout << *p_a << endl;//输出的还是“6”,“ * ”可视为再把硬币翻一次面,就回到了a;


cout<<&a<<endl;//输出的是a的地址;

cout<<p_a<<endl;//同上,说明p_a里存的是a的地址;


p_a++;

cout<<*p_a<,endl;//此时指针指向的是p_a++这个地址,所以再翻面输出的时候就不是a了;

还有一个值得关注的问题:
*p_updates++;cout << updates << endl;//此时输出的是6,可是难道不应该和下面一样输出7吗?自增运算符在这里不能用吗?*p_updates = *p_updates + 1;cout << updates << endl;//如果写“+1”就会输出7了++自增运算有条件限制吗?我提问了,看看什么时候有回复再来修改。

二、详细解释指针新类型

int  *p_a这种写法也可以,哪里添加空格或者直接不加空格对编译器来说是一样的;

但是每一个指针变量都必须有一个“ * ”。

Int* a,b;//意味着一个指针变量a和一个int b


三、给指针一个地址;

int * p;
p =(int*) 0xB8000000;//没有“(int *)”不行,此时指针的地址是B8000000;
cout << p;

四、指针为什么总是占四个字节

指针存放的是一个地址,32位系统中一个地址的长度为32位,所以一个指针的大小也是32位,即4字节

五、用new来创建动态数组

1.单个
int* p=new int ;
2  数组

(1)一维数组

       double* p3 = new double[3];//创建一个大小为3,类型为double的数组,但此时没给赋值,只是申请到了地方。
p3[0] = 0;
p3[1] = 1;//指针名可以作为数组名,但是指针名++有意义。数组名不可修改。
p3[2] = 2;
cout << "p3[0]" << p3[0] << endl;//输出的是0
p3 = p3 +1;
cout << p3[0] << endl;//输出的是1,说明p3代表数组读取的起始位置,导致P3指向数组的第二个元素。这里的“1”是一个double的字节数(8)。
p3++;
cout << p3[0];//输出2

        cout << p3[2];//输出乱码,因为前面只申请了3double空间,这会溢出了

        //直接用指针申请动态空间时,把指针的名字直接解释成数组名字pa=a

//用指针指向已经申请好的数组空间时,指针名字是数组地址,*pa=a;pa!=a.

        double a[3] = { 1.1,2.2,3.3 };

        short b[3] = { 1,2,3 };

double* pa = a;
short*pb = &b[0];

cout << "\n直接输出 pa " << pa << endl;//估计是数组a开头的地址
cout << "\n输出 *pa " << *pa << endl;//a[0];
cout << "\n直接输出 pb " << pb << endl;//b开头地址
cout << "\n输出 *pb " << *pb << endl;
pa++;//加了所属类型的字节数;
cout << "\n数组a的地址+1 :/npa:" << pa << "\n*pa" << *pa << endl;
pb++;//加了所属类型的字节数;
cout << "\n数组b的地址+1 :/npa:" << pb << "\n*pa" << *pb << endl;

cout << *(pa + 1) << endl;//这也是允许的输出地址加一后对应的数字

cout << &a[0]<< endl;
cout << &a << endl;//输出同上,说明取数组地址,一定是数组第一个元素的地址

0 0
原创粉丝点击