数组的名称就是数组再内存中的首地址。若定义一个指针变量,并将数组的首地址传给指针变量,则该指针就指向了这个一维数组
例如:int *p,a[10]
p=a;
此时就是将数组a的首地址赋给p
也可以写成如下形式:
p=&a[0]
注意:
在使用数组指针的时候,输入可以写成
对于一维数组:
int a[10];
p=a;(或p=&a[0])
for
scanf("%d",p++) //此时p相当于&a[0]
printf("%d",*p
对于一维数组:
#include<stdio.h>
int main(void)
{
int i, *p;
int a[10];
p = a;
for (i = 0; i < 10; i++)
{
scanf("%d", p++);
}
p = a;
for (i = 0; i < 10; i++)
{
printf("%d", *(p+i)); //或*p++
}
}
对于二维数组:
#include<stdio.h>
int main(void)
{
int i,j, *p;
int a[3][3];
p = a[0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3;j++)
{
scanf("%d", p++);
}
}
p = a[0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d", *p++);
}
printf("\t");
}
}
若要输出二维数组的某行:
#include<stdio.h>
int main(void)
{
int i, j, (*p)[3]; //(*p)[3]指的数组指针 他是指针 指向一个含有3个元素的一维数组
int a[3][3];
p = &a[0]; //此时p在a[0]处连接,输入元素
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", (*(p + i) + j));
}
}
p = &a[1]; //此时p在a[1]处连接,输出3位元素
for (j = 0; j < 3; j++)
{
printf("%d", *((*p) + j));
}
}