C语言---数组指针与指针数组
一.数组指针与指针数组
1.数组指针:
(1)定义及初始化:

int array[10] ={0} ;
int (*array)[10] = &array;
或者:
int *(p)[] = (int (*) []) malloc(10*sizeof(int));
for(int i=0;i<10;i++)
{
(*p)[i] = i+1;
}
free(p);
(2)使用:
for(int i = 0; i<10;i++)
Printf(“%d\t”,*(*p+i));
或者
printf(“%d\t”,(*p)[i]);
(3)传参:int Fun(int (* ppp)[]);
(4)返回值:int (*Fun(int (*ppp)[]))[];
2.指针数组:
(1)定义及初始化:

int a= 10 , b = 10 , c = 10;
int *array[3] = {&a,&b,&c};
或者:
int *array[5];
for(int n=0;n<5;n++)
{
array[n] = (int *)malloc(sizeof(in));
*array[n] = n+1;
}
(2)使用:
for(int i=0; i < len ; i++)
{
Printf(“%d”,*array[i]);
或者:
printf(“%d”,**(array+i));
}
(3)返回值:可以返回(void *)
int ** Fun()
{
int a=8,b=88,c=888,d=8888;
int * array[] = {&a,&b,&c,&d};
int **e = &(p[0]);
return e;
}
二.scanf以及printf应该注意的地方
1.scanf();
在要用scanf连续赋值的地方,要注意其会有多一个回车符’\n’输入到内容中。如果缓冲区还有数据,scanf()则不会阻塞等待用户的输入。
当程序代码,输入一个字母时,会出现如下情况:

#include
int main()
{
int a;
while(1)
{
printf("输入一个数\n");
scanf("%d",&a);
/*
while(1)
{
if(getchar() == '\n')break;
}
*/
switch(a)
{
case 1 : printf("这是一个1\n");break;
case 2 :printf("这是一个2\n");break;
case 3 : printf("这是一个3\n");break;
default : printf("其他情况\n");break;
}
}
return 0;
}
因此,要添加

这一串代码来清除缓冲区;
2.Printf():
在需要连续打印的地方,要注意添加‘\n’换行符。如果没有添加换行符,则缓冲区需要数据充满,才会一次性打印出来;

