1、
#include<stdio.h>
int main(){
int arr1[]={1,2,3,4,5};
int arr2[]={2,3,4,5,6};
int arr3[]={3,4,5,6,7};
int* p[]={arr1,arr2,arr3};
int i=0;
for(i=0;i<3;i++){
int j=0;
for(j=0;j<5;j++){
printf("%d ",*(p[i]+j));
}
printf("\n");
}
return 0;
}
2、
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("arr = %p\n",arr);
printf("&arr= %p\n",&arr);
printf("arr+1 = %p\n" , arr+1);
printf("&arr+1= %p\n" , &arr+1);
return 0 ;
}
根据上面的代码我们发现,其实&arr和arr ,虽然值是一样的,但是意义应该不一样的。 实际上:&arr表示的是数组的地址 ,arr是数组首元素的地址。数组的地址+1 ,跳过整个数组的大小,所以&arr+1相对于&arr 的差值是40.
1、
int (*p)[10];
2、
char* arr[5];
char*(*pa)[5]=&arr;
3、
#include <stdio.h>
void print_arr1(int arr[3][5], int x, int y)
{
int i = 0 ;
for(i=0;i<x;i++)
{
int j=0;
for(j=0;j<y;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
void print_arr2(int(*arr)[5],int x,int y)
{
int i=0;
for(i=0;i<x;i++)
{
int j=0;
for(j=0;j<y;j++)
{
printf("%d ",arr[i][j]);
printf("%d ",*(arr[i]+j));
printf("%d ",(*(arr+i))[j]);
printf("%d ",*(*(arr+i)+j));
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
print_arr1(arr , 3 , 5);
print_arr2(arr , 3 , 5);
return 0 ;
}
4、
#include<stdio.h>
int main(){
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
int* p=arr;
for(i=0;i<10;i++)
{
printf("%d ",*(p+i));
printf("%d ",*(arr+i));
printf("%d ",arr[i]);
printf("%d ",p[i]);
}
return 0;
}
5、在实际应用过程中,在以为数组中并不常用数组指针,数组指针可能更常见于二维等更高维的数字中,但是我们也应该掌握这个知识点。