数组是按顺序排列的,同类型对象的集合。(下面所有如果索引0称之为第0个子元素,其他类似)
int arr[4]={1,2,3,4};//声明数组变量arr,并初始化
数组属于不可修改左值,因此只能初始化,无法赋值:
arr={4,5,6,7};//错误
可以通过下标运算符 [ ] 来访问数组元素:
int a=arr[0];//获取第0个数组元素 arr[0]=2;//修改第0个数组元素
如果数组的每一个元素,也是一个数组类型,那么称之为二维数组(多维数组):
int twoArr[3][2]={{1,2},{3,4},{5,6}}; int b = twoArr[1][0];//访问第1个子元素数组{3,4},再访问其第0个int元素3
指针对是某类型对象地址的称呼(类型+地址)。通过&运算符创建指针。
int a=1; int* p=&a;//&a是指针,int*类型,指向对象a,p是存储指针的变量,但在不混淆的情况下也可以把p叫做指针
通过 * 运算符访问指针指向的对象,称之为解引用:
int b=*p;//获取指针指向对象a的值1,初始化b为1 *p=3;//修改指针指向对象a的值为3
数组类型的左值表达式大多数会隐适转换为首元素指针(也称之为退化),转换后的指针不是左值。数组名是数组的标识符,本身不是指针。下标运算符 [ ]不是数组运算符,用于指针和整数的运算符
。
int arr[4]={1,2,3,4}; int *p=arr;//arr隐适转换为首元素指针 int a=arr[1];//arr隐适转换为首元素指针 int (*arrp)[4]=&arr;//不转换成指针 int (*arrp)[4]=&(1,arr);//错误,逗号表达式返回最右侧的表达式的值,作为整个表达式的值,此时arr作为子表达式转换为了指针,不是左值,因此无法用于&运算符
字符串字面量也是数组类型,因此大多数也会转换成首元素指针,用于初始化字符数组类型除外:
char* cpointer="hello";//转换为首元素指针 char cArr[]="hello";//初始化char[]类型数组,不会隐适转换
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/11609.html