C++学习---指针与数组

1.数组

由具体详相同数据类型的数据元素按照一定顺序排列而成的集合,由字符数组、常量数组、实数数组和指针数组等。

1.1一维数组

//一维数组的定义
类型 数组名[常量表达式];
float arry[10];
//其中常量表达式为数组大小,不能含有变量

//一维数组的存储
数组名为数组首元素地址,后续元素按照下标顺序连续存储
int a[6];
//说明6个int型数据按照顺序依次排列

//一维数组的初始化
int a[5] = {1,2,3,4,5};
int a[5] = {1,2,3}//可以小于数组元素,后续补0
int a[] = {1,2,3,4,5}//可以不指定长度


//一维数组的引用
数组名[下标]
//从0开始,最大下标为常量表达式减一

1.2多维数组

//二维数组的定义
类型 数组名[常量表达式][常量表达式];
int a[3][4];
//数组的数组,即为包含a[0],a[1],a[2]三个一维数组的数组

//二维数组的存储
从右到左,从上往下一次存储

//二维数组的初始化
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次初始化
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次逐一初始化时可省略行下标
int a[3][4] = {1,2,3};//省略元素自动补0
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9}};//

//二维数组的引用
数组名[行下标][列下标];

//多维数组的定义
int a[2][3][4];

1.3字符数组和字符串

//字符数组的定义
char 数组名[常量表达式];
char ch[6];

//字符串
以双引号括起来的字符序列,长度固定的数组可以存放不同长度的字符串,字符串以'\0'作为结束的标志

//字符数组的初始化
char ch[5] = {'a', 'b', 'c', 'd', 'e'};
char ch2[5] = "abccd";//使用字符串初始化数组时长度减一
char ch3[3][4] = {"abc", "def", "xyz"};

//字符数组元素的引用
数组名[下标];

//字符串处理函数:拷贝、连接、比较、长度<string.h>
strcpy(sto, strom);//注意sto空间足够大
strcat(s1, s2);//注意s1空间足够大
strcmp(s1, s2);//自左向右逐一比较对应字符的ASII码,相等返回0,s1>s2返回正数,s1<s2返回负数
srelen(str);//返回字符串的长度(有效字符的个数)

//String类
使用重载运算符,连接、赋值、拷贝不再需要函数

2.指针

2.1指针的概念

指针:存放变量、数组与函数等的内存地址;

指针变量:存放内存地址(即指针)的变量;

作用:提供一种间接访问变量的手段;

注意:必须先赋值后引用

2.2指针变量定义

//指针变量的定义
类型 *指针变量名;
int *p1;
float *p2;
char *p3;
void *p4;

//指针变量的初始化
类型 *指针变量名 = 内存地址;
int a, *p1;
p1 = &a;
注意:指针不能直接赋以具体值(可以是NULL空指针值),指针必须先赋值后使用

2.3指针运算

引用运算

      取地址运算:&(指针变量名)  得到指针变量本身的地址

      取内容运算:*(指针变量名)得到指针指向的存储单元的内容

算术运算:与整数N进行加减,表示指针由指向当前位置向前或向后移动指向N个单元

关系运算:判断两个指针是否指向同一单元

3.指针与数组

3.1指向数组的指针

指向一维数组的指针
//指针访问数组元素
int a[10];
int n;
n = *a;//指向数组第一个元素
n = a[5];//指向数组第6个元素
n = *(a + 5);//指向数组第6个元素

//[]访问指针存储的内容
int a[10];
int *p = a;
int n;
n = *a;//指向数组第一个元素
n = p[5];//指向数组第6个元素
n = *(p + 5);//指向数组第6个元素

//指针型变量与数组名指针常量
char ca[10];
char *ch;
ca = &ch;//错误,不能将一个指针值赋予一个数组名

 

指向多维数组的指针
首地址:数组名
行首地址:数组每一行的地址,相当于组成二维数组的一位数组的地址
元素地址:二维数组具体分量的地址
a[i][j]的地址表示如下: 
&a[i][j] = a[i]+j = *(a+i)+j = a[0]+i*m+j//这里有点不太明白
//指向数组元素的指针变量
int a[3][4];
int *p;
p = a[0];//p是指向数组元素的指针,变量存放的是列地址

//指向一维数组的指针变量
int a[3][4];
int (*p)[4];//指向一维数组的指针变量

3.2指向字符串的指针

指针处理字符串是指针处理数组的一种特殊情况;

3.3指针数组和指向指针的指针

指针数组:数组元素均为指针变量的数组;

类型 *数组名[常量表达式];
int *p[5];

指向指针的指针:多级指针

4.指针与函数

4.1指向函数的指针

//即指针指向函数的入口
返回值类型 (*指针变量名)(形参列表);

4.2返回指针值的函数

//即返回值为指针类型
类型 *函数名(形参列表);
posted @ 2019-03-21 21:08  凌·杰特  阅读(236)  评论(0编辑  收藏  举报