数组相关知识介绍:初始化、访问、指针及字符串字面量转换

数组是按顺序排列的,同类型对象的集合。(下面所有如果索引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[]类型数组,不会隐适转换

小菜

503***

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注