一、数组指针定义
数组指针定义:
#include <stdio.h>
#include <windows.h>
#define ONE 3
#define TWO 7
int main(){
int Array_two[ONE][TWO] = {0};
int (*Ptr_array)[TWO] = NULL; //定义数组指针,并指为NULL(空);
return 0;
}
数组指针格式万不可错误,若书写为:int *p[TWO] = NULL;则是 指针数组,两者不可混为一谈;
格式:数据类型 + ( )圆括号 + * + 变量名 + [ ]方括号;
特别注意:
圆括号内要包含 ’ * ’ 解引用符 和 变量名,方括号在圆括号外,方括号内要设置元素数量;
定义数组指针时,数组指针变量的元素 要与 指向的多维数组最后一维度元素下标一致;
二、数组指针赋值
数组指针赋值:
#include <stdio.h>
#include <windows.h>
#define ONE 3
#define TWO 7
void Ptr_show_array(int sub_one, int sub_two, int (*p)[sub_two],int array[][sub_two]){
printf("\n数组指针法遍历数组: \n");
for(int x = 0; x < sub_one; x++){
p = &array[x];
}
}
int main(){
int Array_two[ONE][TWO] = {0};
int (*Ptr_array)[TWO] = NULL; //定义数组指针,并指为NULL(空);
fflush(stdin);
system("cls");
Ptr_show_array(ONE,TWO,Ptr_array,Array_two);
return 0;
}
三、数组指针访问
数组指针访问:
#include <stdio.h>
#include <windows.h>
#define ONE 3
#define TWO 7
void Ptr_show_array(int sub_one, int sub_two, int (*p)[sub_two],int array[][sub_two]){
printf("\n数组指针法遍历数组: \n");
for(int x = 0; x < sub_one; x++){
p = &array[x];
for(int y = 0; y < sub_two; y++){
printf("%d\t",(*p)[y]);
}
}
}
int main(){
int Array_two[ONE][TWO] = {0};
int (*Ptr_array)[TWO] = NULL; //定义数组指针,并指为NULL(空);
fflush(stdin);
system("cls");
Ptr_show_array(ONE,TWO,Ptr_array,Array_two);
return 0;
}
四、定义数组指针时的注意要点
定义数组指针时的注意要点
for(int x = 0; x < sub_one; x++){
p = &array[x];
}
数组指针 指向 多维数组 要点:
1、定义数组指针时,数组指针变量的元素 要与 指向的多维数组最后一维度元素下标一致;
2、指向多维数组时,右值是二维数组变量名 + &(取址符) + 最后一维度前的所有维度元素下标;意为将指定多维数组地址赋值给数组指针;
举例:更高维度数组 赋值给 数组指针;
int Three_array[1][2][3];
int (*p)[3] = NULL;
p = &Three_array[1][2];
for(int x = 0; x < sub_one; x++){
p = &array[x];
for(int y = 0; y < sub_two; y++){
printf("%d\t",(*p)[y]);
}
}
数组指针取值时注意要点:
1、运算符的优先级:
’ * ’ 解引用运算符 比 ’ [] ’ 方括号运算符 优先级低,所以作取值时, ’ * ’ 解引用运算符必须要先与指针变量结合;
再与 ’ [] ’ 方括号结合,获取指向的数组指定元素的值;