一.一维数组
1.1定义初始化遍历
整型数组
字符数组
1.2数组名的作用(指针常量) 数组首元素的地址
1.2.1 array 与& array 的区别
&a 对一维数组的数组名取地址等于数组的地址
*(&a) 对一维数组的地址取值等于数组首元素的地址
1.2.2数组指针
数组指针定义与初始化
数组指针是一个指针变量,这指针指向一个数组
int (*pa)[3] = &a;
数组指针的作用 :保存数组的地址
传一维数组的地址 用数组元素指针来接
传二维数组的地址 用一维数组指针来接
传一维数组的地址 用二维数组指针来接
void print_ptr(char ptr[100]) // vod print_ptr(char *ptr)
void print_ptr(char src[3][100]) //void print_ptr(char (*src)[100])
二.二维数组
1.1定义初始化遍历
整型数组
字符数组
char src[3][100];
scanf(“%s”,src[i]); // scanf(“%s”,*(src+ i));
1.2数组名的作用(指针常量)首个一维数组的地址
1.2.1 *(*(array)+ i)+ j )如何理解
array)+ i 第i + 1 个一维数组的地址
*(array)+ i) 第i + 1 个一维数组的首元素的地址
*(array)+ i)+ j 第i + 1 个一维数组的第j + 1个元素的地址
*(*(array)+ i)+ j ) 第 i + 1 个一维数组的第j + 1个元素的值
1.2.1指针数组
指针数组定义与初始化
int i;
for(i = 0; i < 3; i++)
{
pa[i] =(int *)malloc(sizeof(int));
scanf("%d",pa[i]);
printf("pa[%d] = %d\n",i,*(pa[i]));
}
指针数组的作用
int main(int argc,char *argv[]);
argc 命令行参数的个数
argv[] 保存命令行参数
\\可用于函数入口参数检查
if(argc != 2)
{
printf("Please input one param!");
}
ps: void printf_ptr(char **ptr)
传指针数组或指针的地址 用指针的指针来接
三.数组的复杂声明
3.1左右法则
3.2复杂指针声明:int *(*(*fp1)(int))[10];
四.指针和数组的区别
空间分配: 数组的空间时静态分配的,分配的空间是连续的;指针是动态分配内存空间,不连续分配空间
访问效率:数组是直接访问,访问效率高 ,而指针属于间接访问,访问效率低
安全性:数组可能会引起数组越界,指针会可能会因为是野指针引起内存泄漏
函数形参:数组的函数形参为:元素指针或是 数组指针 指针函数形参:指针的指针
处理:数组偏向于地址的处理,指针偏向于值得处理