2019/02/15训练日记+指针(二)

最近做STL的题,STL有多少种容器都还不明确,这个题做起来就与点浪费了,今天看了一天大神讲STL。他们讲的都是map set vector,没有queue,只能去CSDN看大佬发的博客,有点高深,和进一波勾起了我的求知欲,天天看一部分,明天一部分,明天就逼着自己写一份,有关容器的总结,让自己更了STL,下面是前几天预习指针所摘抄的知识点。

说起指针,就一定不能不提数组,数组与指针是天生一对,分不开。均以int型为例(interesting);

数组的名字是一个指针常量指向数组的起始地址

PS:int a[50];
a的类型是int*
可以用a给int*类型的指针赋值
a是编译时就饿确定了的常量,不能够对a进行赋值

指针和数组

1.作为函数形参时,int*p和int p[ ]等价
Such as
int resert(int *p)
{
return sizeof§;
}
等价于
int resert(int p[ ])
{
return sizeof§;
}

#include <iostream>
using namespace std;
int main()
{
    int a[200]; 	int * p ;
    p = a;				// p指向数组a的起始地址,亦即p指向了a[0]
    * p = 10;			//使得a[0] = 10
    *( p + 1 ) = 20; 	//使得a[1] = 20
    p[0] = 30; //p[i] 和*(p+i) 是等效的,使得a[0] = 30
    p[4] = 40; //使得a[4] = 40
    for( int i = 0;i < 10; ++i) //对数组a的前10个元素进行赋值
    *( p + i) = i;
    ++p;				 // p指向a[1]
    cout << p[0] << endl; //输出1 p[0]等效于*p, p[0]即是a[1]
    p = a + 6; // p指向a[6]
    cout << * p << endl;// 输出6
    return 0;
}

上代码实战
写一个数组倒置函数

void Reverse(int * p,int size)
 { 
 	 for(int i = 0;i < size/2; ++i)
 	 {
     	int tmp = p[i];
	 	p[i] = p[size-1-i];
  	    p[size-1-i] = tmp;
  	   }
}
指向指针的指针

int * *p;
p是指向指针的指针,p指向的地方应该存放着一个类型为int * 的指针,*p 的类型是int *.

void 指针

void指针:void * p;可以用任何类型的指针对void 指针进行赋值或初始化:
因sizeof(void) 没有定义,所以对于void * 类型的指针p,
*p 无定义
++p, --p, p += n, p+n,p-n 等均无定义

posted @ 2019-02-15 23:57  风骨散人  阅读(93)  评论(0编辑  收藏  举报