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 等均无定义