您的位置:首页 > 编程语言 > C语言/C++

c语言之指针(指向数组元素的指针与指向数组的指针)

2014-05-13 12:42 246 查看
//指向数组元素的指针

#include<stdio.h>

#define M 3

main()

{

int a[M][M]={1,9,6,3,8,7,4,6,2};

int s[M], i, j;

void max(int *p1,int *p2);

printf("Matrix a :\n");

for(i=0; i<M; i++)

{

for(j=0; j<M; j++)

printf("%4d",a[i][j]);

printf("\n");

}

max(s,a[0]);//必须为实参必须a[0],指向列指针。不能为a,二维数组中数组名称代表的是行指针。切记

printf("\n");

for(i=0; i<M; i++)

{

printf("Row = %2d\tMax=%-5d\n", i, *(s+i));

}

printf("\n");

return 0;

}

void max(int *p1,int *p2)

{

int i,j;

for(i=0,j=0; i<M*M; i++,p2++)

{

*(p1+j)=*p2;

if(*(p1+j)>*p2)

*(p1+j)=*p2;

if((i+2)%3==0)

j++;

}

}

//指向数组的指针

#include<stdio.h>

#define M 3

main()

{

int a[M][M]={1,9,6,3,8,7,4,6,2};

int s[M], i, j;

void max(int *p1,int (*p2)[M]);

printf("Matrix a :\n");

for(i=0; i<M; i++)

{

for(j=0; j<M; j++)

printf("%4d",a[i][j]);

printf("\n");

}

max(s,a);//必须为a,或者为&a[0],由于指针*p2[M]是一个指向一维长度为M的指针数组,调用时实参应取行地址。切记。

printf("\n");

for(i=0; i<M; i++)

{

printf("Row = %2d\tMax=%-5d\n", i, *(s+i));

}

printf("\n");

return 0;

}

void max(int *p1,int (*p2)[M])

{

int i,j;

for(i=0; i<M; i++)

{

*(p1+i)=*(*(p2+i)+0);

for(j=1;j<M;j++)

if(*(p1+i)<*(*(p2+i)+j))

*(p1+i)=*(*(p2+i)+j);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: