一、二维指针的物理结构
char *buff[5];
buff[0] = "aaa";
buff[1] = "bbb";
buff[2] = "ccc";
buff[3] = "ddd";
遍历时:逻辑上有序,物理上无序
构造空间时,物理上无序空间变为逻辑上有序空间时,考虑用指针数组的方式来维护;
因为数组有有序下标,也可以去接收函数名,使其变得逻辑上有序
char *buff[xx];
一维指针
char a1[10];
char *p1=a1;
二维指针
用一个地址来保存buff的地址
*p2 = buff;//先把p2升级为地址*p2
char* *p2 = buff;//再使用char* 限定buff的访问行为
例:
int *p;
int a;
p=&a;//有效空间1个
int arr[2];
p = arr;//有效空间4个
char *buff[5];
char **p2 = buff;
char *aaa;
p2 = &aaa;
char *p1;//一个char一个char的访问
char * *p2;//一个字节地址一个字节地址的访问
int * *p3;//四个字节地址四个字节地址的访问
二、main的函数参数
#include<stdio.h>
int main(int argc,char **argv){
//int main(int argc,char *argv[]){
int i = 0;
for( i=0; i<argc; i++ ){
printf("argv[%d] = %s\n",i,argv[i]);
}
printf("-------------\n");
int j = 0;
while(argv[j] != NULL){
printf("argv[%d] = %s\n",j,argv[j]);
j++;
}
return 0;
}
三、多维数组
1、多维数组的含义
一维数组:与内存一致,线性
char data1[10];//data1 连续空间集合第一个元素的地址标签 常量地址
char *p = data1;//p1 存储地址值的容器 地址的变量
二维数组:
char data2[3][4]; //data2 3个元素(首地址) 每个元素都是4个char
//3行4列 二维平面
char data3[1][2]; *(data3 + 1) +2
char data1[10];
char data2[5][6];
char data3[5][6][7];
printf("%p %p\n",data2,data2+1);//偏移6个地址
char *p1 = data1;
// char *p[6]; //存了六个地址,
char (*p2)[6] = data2;//存了一个地址
char (*p3)[6][7] = data3;
char (*p11)[10] = &data1;
char (*p22)[5][6] = &data2;
char (*p33)[5][6][7] = &data3;