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