数组指针是指针,是指向一个数组的指针。
指针数组是数组,是一个所有元素都是指向同一类型的指针。
好好体会下面的代码:
#include<stdio.h>
#include<stdlib.h>
/*
指针数组,每一个元素都是指针
*/
void pointer_array()
{
char* p[3]={"AAA","BBB","CCC"};
int MAX_SIZE=2;
for(int i=0;i<3;++i)
{
p[i]=(char*)(malloc(sizeof(char)*MAX_SIZE));
scanf("%s",p[i]);
}
for(int i=0;i<3;++i)
{
printf("%s\n",p[i]);
}
}
/*
数组指针,指向数组的指针
*/
void array_pointer()
{
/*
注意下面三种方式所代表的意义
typedef int A[10];
A *p;
typedef int(*a)[10];
a q;
int (*r)[10];
*/
int (*a)[5];
int b[5];
int c[5]={1,2,3,4,5};
a=&b;
for(int i=0;i<5;++i)
{
b[i]=&c[i];
scanf("%d",(*a)[i]); //给 a[i]指向的地方赋值,a[i]保存的是c[i]的地址
scanf("%d",&(*a)[i]); //给a[i]本身赋值,a[i]代表的就是b[i]
}
for(int i=0;i<5;++i)
{
printf("c[%d]%d\n",i,c[i]);
printf("b[%d]&d\n",i,b[i]);
}
}
void double_dimension_array()
{
typedef int (*a)[10];
a q[5];
int w=0;
int *b;
for(int i=0;i<5;++i)
{
b=(int *)(malloc(sizeof(int)*10));
for(int j=0;j<10;++j)
{
b[j]=j+w*10;
}
++w;
q[i]=b;
}
printf("结果输出\n");
for(int i=0;i<5;++i)
{
for(int j=0;j<10;++j)
{
printf("%d\n",(*(q[i]))[j]);
}
}
}
int main()
{
double_dimension_array();
return 0;
}