1、指针数组访问
int main()
{
int str[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *p;
for(p = str; p < str + 10; p++)
{
printf("%d\n",*p);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str[5] = {"mspaint", "notepad", "pause", "tasklist", "calc"};
char **pp;
for(pp = str; pp < str + 5; pp++)
{
printf("%s\n",*pp);
}
return 0;
}
指针数组,字符串常量数组,每个元素都是都是一个指针,指向对应字符串,普通一维数组用*p访问,指针数组用**p访问。
2、二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[5][10] = {"mspaint", "notepad", "pause", "tasklist", "calc"};
char **pp;
for(pp = str; pp < str + 5; pp++)
{
printf("%s\n",*pp);
}
return 0;
}
输出错误
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[5][10] = {"mspaint", "notepad", "pause", "tasklist", "calc"};
char (*p)[10];
for(p = str; p < str + 5; p++)
{
printf("%s\n",*p);
}
return 0;
}
正确。
二维数组:内存中一段连续的空间
sizeof(**p) = 1 而sizeof(*p) = 10;
3、
int main()
{
char str[5][10] = {"mspaint", "notepad", "pause", "tasklist", "calc"};
printf("%p %p %p\n",str,&str,*str);
printf("%d %d %d",sizeof(*str),sizeof(*(&str)),sizeof(*(*str)));
}
三个地址相同,只是分别代表的意义不一样
第一行输出:002afc34 002afc34 002afc34
第二行输出:10 50 1
str代表行地址,&str代表整个数组的地址,*str代表第一个字符的地址