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返回指针值的函数
//即返回值为指针类型 类型 *函数名(形参列表);