- 一、定义字符数组和字符指针数组
- 二、打印指针数据的基地址和指针的指向
- 三、指针数组的下标指向字符数组,并格式化字符数组的内容
- 四、打印字符数组的基地址和指针数组的指针指向
- 五、完整测试代码和效果显示
char str[32]={};
char str1[32]={};
char str2[32]={};
char *sensordata[32];
个人理解:字符数组即一级指针,指针数组是二级指针,指向字符数组的地址或者一级指针的地址;
二、打印指针数据的基地址和指针的指向 printf("--------------指针数组的基地址-------------n");
printf("sensordata[0]的地址: %pn",&sensordata[0]);
printf("sensordata[1]的地址: %pn",&sensordata[1]);
printf("sensordata[2]的地址: %pn",&sensordata[2]);
printf("n--------------指针数组的下标指向-------------n");
printf("sensordata[0]的地址: %pn",sensordata[0]);
printf("sensordata[1]的地址: %pn",sensordata[1]);
printf("sensordata[2]的地址: %pn",sensordata[2]);
打印结果:
--------------指针数组的基地址-------------
sensordata[0]的地址: 0x7ffcbe058c10
sensordata[1]的地址: 0x7ffcbe058c18
sensordata[2]的地址: 0x7ffcbe058c20
--------------指针数组的下标指向-------------
sensordata[0]的地址: 0x7ffcbe058d10
sensordata[1]的地址: 0x3
sensordata[2]的地址: 0x7ffcbe058d00
- 由此可知,指针数组的的基地址也是按顺序的,相隔下标相差0x08.
- 指针数组里面存储的指针指向不确定的,随机的,无法知道指针数组指向的空间大小;
//指针数组的下标指向到数组
sensordata[0]=str;
sensordata[1]=str1;
sensordata[2]=str2;
//格式化数组的内容,sprintf是不安全的函数,会导致缓存区溢出
sprintf(str,"airH:%.2f ",76.83);
sprintf(str1,"airT:%.2f ",26.50);
sprintf(str2,"ill:%d ",356);
printf("n--------------打印数组的内容-------------n");
printf("str0的数据: %sn",str);
printf("str1的数据: %sn",str1);
printf("str2的数据: %sn",str2);
printf("n--------------打印指针数组下标指向的内容-------------n");
printf("sensordata[0]的数据: %sn",sensordata[0]);
printf("sensordata[1]的数据: %sn",sensordata[1]);
printf("sensordata[2]的数据: %sn",sensordata[2]);
运行效果:
--------------打印数组的内容-------------
str0的数据: airH:76.83
str1的数据: airT:26.50
str2的数据: ill:356
--------------打印指针数组下标指向的内容-------------
sensordata[0]的数据: airH:76.83
sensordata[1]的数据: airT:26.50
sensordata[2]的数据: ill:356
- 指针数组的下标指向字符数组中,确定指针数组的指针指向;
- 使用sprintf格式化字符数组的内容,格式化的数据不能超过字符数据的长度,否则会引起内存溢出;
- 因指针数组里面的下标指向了字符数组,所以可以通过下标直接获取数组的数据;
printf("n--------------数组的基地址-------------n");
printf("str的地址: %pn",str);
printf("str1的地址: %pn",str1);
printf("str2的地址: %pn",str2);
printf("n--------------指针数组的指向的地址-------------n");
printf("sensordata[0]的地址: %pn",sensordata[0]);
printf("sensordata[1]的地址: %pn",sensordata[1]);
printf("sensordata[2]的地址: %pn",sensordata[2]);
运行效果:
--------------数组的基地址-------------
str的地址: 0x7ffcbe058d10
str1的地址: 0x7ffcbe058d30
str2的地址: 0x7ffcbe058d50
--------------指针数组的指向的地址-------------
sensordata[0]的地址: 0x7ffcbe058d10
sensordata[1]的地址: 0x7ffcbe058d30
sensordata[2]的地址: 0x7ffcbe058d50
可见,指针数组里面的指针指向和字符数组的基地址一样,从而实现指针数据对数组的储存和获取操作!
//gcc 7.4.0 #include#include int main(void) { char str[32]={}; char str1[32]={}; char str2[32]={}; char *sensordata[32]; printf("--------------指针数组的基地址-------------n"); printf("sensordata[0]的地址: %pn",&sensordata[0]); printf("sensordata[1]的地址: %pn",&sensordata[1]); printf("sensordata[2]的地址: %pn",&sensordata[2]); printf("n--------------指针数组的下标指向-------------n"); printf("sensordata[0]的地址: %pn",sensordata[0]); printf("sensordata[1]的地址: %pn",sensordata[1]); printf("sensordata[2]的地址: %pn",sensordata[2]); //指针数组的下标指向到数组 sensordata[0]=str; sensordata[1]=str1; sensordata[2]=str2; //格式化数组的内容,sprintf是不安全的函数,会导致缓存区溢出 sprintf(str,"airH:%.2f ",76.83); sprintf(str1,"airT:%.2f ",26.50); sprintf(str2,"ill:%d ",356); printf("n--------------打印数组的内容-------------n"); printf("str0的数据: %sn",str); printf("str1的数据: %sn",str1); printf("str2的数据: %sn",str2); printf("n--------------打印指针数组下标指向的内容-------------n"); printf("sensordata[0]的数据: %sn",sensordata[0]); printf("sensordata[1]的数据: %sn",sensordata[1]); printf("sensordata[2]的数据: %sn",sensordata[2]); printf("n--------------数组的基地址-------------n"); printf("str的地址: %pn",str); printf("str1的地址: %pn",str1); printf("str2的地址: %pn",str2); printf("n--------------指针数组的指向的地址-------------n"); printf("sensordata[0]的地址: %pn",sensordata[0]); printf("sensordata[1]的地址: %pn",sensordata[1]); printf("sensordata[2]的地址: %pn",sensordata[2]); printf("sensordata的数据: %sn",sensordata); return 0; }
Compilation time: 0.44 sec, absolute running time: 0.15 sec, cpu time: 0 sec, memory peak: 5 Mb, absolute service time: 0,69 sec --------------指针数组的基地址------------- sensordata[0]的地址: 0x7ffcbe058c10 sensordata[1]的地址: 0x7ffcbe058c18 sensordata[2]的地址: 0x7ffcbe058c20 --------------指针数组的下标指向------------- sensordata[0]的地址: 0x7ffcbe058d10 sensordata[1]的地址: 0x3 sensordata[2]的地址: 0x7ffcbe058d00 --------------打印数组的内容------------- str0的数据: airH:76.83 str1的数据: airT:26.50 str2的数据: ill:356 --------------打印指针数组下标指向的内容------------- sensordata[0]的数据: airH:76.83 sensordata[1]的数据: airT:26.50 sensordata[2]的数据: ill:356 --------------数组的基地址------------- str的地址: 0x7ffcbe058d10 str1的地址: 0x7ffcbe058d30 str2的地址: 0x7ffcbe058d50 --------------指针数组的指向的地址------------- sensordata[0]的地址: 0x7ffcbe058d10 sensordata[1]的地址: 0x7ffcbe058d30 sensordata[2]的地址: 0x7ffcbe058d50 sensordata的数据: ���
同时推荐一个在线编译器可以直接在网页上面测试案例;



