C语言的指针与数组
1、一维数组
#include<stdio.h>
int main()
{
int a[10] = {10,5,4,9,7,5,7,8,4,5}; //定义一个数组
int b[10];
int *p,*q,*pp; //定义指针
int i;
// 将指针指向一维数组;
p = &a[0]; //让指针指向数组的首元素地址
q = a; // 在一维数组里,数组名字代表的就是首元素(序号为0)的地址
printf("%4d,%4d \n",*p,*q);
// 利用指针给一维数组赋值;
pp = b;
for(pp = b ;pp < b+10;pp++) // pp = b 等价于 pp = &b[0] b+10等价于 &b[0]+10
{
scanf("%d\n",pp); // scanf输入的是指针所在的地址。所以不加*号
}
printf("\n");
for(pp = b;pp < (b+10);pp++)
{
printf("%4d",*pp);
}
}
这里需要了解结果几个知识点:
1)指针指向的是数组的首元素地址;
2)数组名代表的就是首元素地址;
3)scanf输入的到指针所代表的地址,也可以用&b[0]代替。
2、二维数组
#include<stdio.h>
int main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //定义二维数组
int c[3][4]; //定义空二维数组
int *p,*q; //定义指针
int (*pp)[4]; //定义数组指针
int *qq[4]; //定义了指针数组
int i,j;
// 将指针指向二维数组;
p = &a[0][0]; // 将指针直接指向数组首元素;
printf("1:%4d,%4d \n",*p,a[0][0]);
p = a[0]; // 数组首元素也可以用上一维首元素代替,可以去掉地址符号;
printf("2:%4d,%4d \n",*p,a[0][0]); // 指针指向第一个第一个元素;
printf("3:%4d,%4d \n",p+4,&a[1]); // 指针的地址;
printf("4:%4d,%4d \n",*(p+1),a[0][1]); //指针指向数组元素的变化是通过相对位置计算的;
printf("5:%4d,%4d \n",*p+4,a[1][0]);
printf("6:%4d,%4d \n",*p+11,a[2][3]);
// 利用指针输入输出二维数组;
q = c[0]; // 先定义首元素;
for(;q <= &c[2][3];*q++) // 将最后一个元素定义为数组最后一个元素的地址;
{
scanf("%d",q); //scanf需要输入的是地址,因此有那个q,而不是*q
}
printf("\n");
for(q = c[0];q <= &c[2][3];*q++)
{
printf("%d",*q);
}
// 数组指针的运用与输出;
pp = a; // 因为*pp代表的就是 4个元素的一维数组地址 因此直接指向 二维数组名所代表的地址
printf("1:%4d,%4d \n",*pp,a[0][0]); //常规引用
printf("2: %4d,%4d \n",**pp+1,a[0][1]); // 想利用绝对物质输出想要的数组元素,需要两个** 但是不能超过4个个也就是声明数组的长度
printf("3: %4d,%4d \n",*(pp+1),&a[1][0]); // 因为pp代表的是一个二维数组下的一维数组地址,因此只用1个* 代表的只是地址
printf("4: %4d,%4d \n",**(pp+1),a[1][0]);
printf("5: %4d,%4d \n",*(*(pp+1)+2),a[1][2]);
// 数组指针的循环输入 错误案例;
pp = c ;
printf("please input the c: \n");
for(pp = c;*pp < &c[2][3];**pp++) // 这里因为指针的总长度只有4个,(*pp)[4],因此输入的元素超过4个就会结束
{
scanf("%d \n",*pp);
}
for(pp = c; *pp < &c[2][3];**pp++)
{
printf("%4d \n",**pp);
}
// 数组指针的循环输入 正确案例;
printf("please input the new c: \n");
for(i = 0 ; i < 3 ; i++) // 这里因为指针的总长度只有4个,(*pp)[4],因此输入的元素超过4个就会结束
{
for(j = 0 ; j < 4 ; j++)
{
scanf("%d \n",*(pp+i)+j);
}
}
printf("the new c : \n");
pp = c ;
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
printf("%d \n",*(*(pp+i)+j));
}
}
}