c++ 数组和指针(vector和迭代器的低级复合类型)

一、数组

1.数组的缺点:数组的长度是固定的,无法改变大小;无法知道数组的大小;数组也不提供push_back等类型的操作,用下标进行操作有时候很麻烦;

2.数组的长度:必须是常量,不可以用变量写入;常量必须是定义时就是常量,即使换算得到的也不可以用来定义数组;

3.数组的初始化:全局数组会自动初始化;局部数组不会自动初始化。

eg: char str1[]={'c','+','+'};
        char str2[]={'c','+','+','/0'};

        char str3[]="c++";

4.数组的操作:(保证数组下标不会越界)

数组下标的定义:size_t

数组的赋值:每一个数据分别拷贝,不能直接对数组进行操作;

5.尽量使用vector(动态数组)来代替数组;

二、指针

1.指针的定义和初始化:

eg: *sp=&s;//sp为指针,*代表sp为指针,s为数组,&为取地址符(sp代表的是s的地址,*sp为sp地址的内容)

注:*可以靠近变量或者类型写均可,都表示这是一个指针;*靠近类型时,定义的指针仅仅是靠近它的变量,其余均为变量;指针一般都要进行初始化;指针可以等于一个常量,但是不能等于变量,变量前必须要加取地址符(*sp只能等于0或者&s或者NULL);指针只能指向同类型的变量地址;

int ival=1024;
int *ip=0;//表示指针不指向任何变量
int *ip2=&ival;//ip2中存的是ival的地址

ip=ip2;//ip和ip2均指向ival

2.万能指针:void *pv=&s;//可以指向任何类型的对象,

注:运用的范围较为窄小,仅仅在几种特殊情况下进行使用:与另一个指针进行比较;向函数传递void*指针或者从函数中返回void*指针 ;向另外一个void*指针赋值。

3.指针和引用:引用(&s=sp)

区别:(1)指针可以先定义,之后在进行初始化;引用必须在声明时进行初始化;

(2)指针通过赋值可以改变其指向的对象;但是引用不可更改,声明初始化以后就不能进行改变;

4.指向指针的指针:int **pi=&ip2;

三、使用指针访问数组



猜你喜欢

转载自blog.csdn.net/qq_35050439/article/details/80938492
今日推荐