二维指针

pigeon_2008 2008-07-22 11:11:10
int main(void)
{
int a[N][N] = {0};
int *p = &a[0][0];
int i, j;

for (i=0; i<N; i++)
{
for (j=0;j<N; j++)
{
scanf("%d", a[i]+j);
}
}

printf("%d\n", MAXVALUE(&p));
return 0;
}

int MAXVALUE(int **p)//找出最大值
{

}
...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2008-07-22
  • 打赏
  • 举报
回复
恐怕要用二级指针才好
pigeon_2008 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 SUN_DRAGON 的回复:]为什要N*N???
#include <stdio.h>
#define N 2


int MAXVALUE(int **p)//找出最大值
{
int max=*p[0],i;
for(i=1;i <N*N;i++)
if((*p)[i]>max)
max=(*p)[i];
return max;
}


int main(void)
{
int a[N][N] = {0};
int *p = &a[0][0];
int i, j;

for (i=0; i <N; i++)
{
for (j=0;j <N; j++)
{
scanf("%d", a[i]+j);
}
}

printf("%d\n", MAXVALUE(&p));
return 0;
}
[/Quote]
SUN_DRAGON 2008-07-22
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 2


int MAXVALUE(int **p)//找出最大值
{
int max=*p[0],i;
for(i=1;i<N*N;i++)
if((*p)[i]>max)
max=(*p)[i];
return max;
}



int main(void)
{
int a[N][N] = {0};
int *p = &a[0][0];
int i, j;

for (i=0; i <N; i++)
{
for (j=0;j <N; j++)
{
scanf("%d", a[i]+j);
}
}

printf("%d\n", MAXVALUE(&p));
return 0;
}

puzzlesky 2008-07-22
  • 打赏
  • 举报
回复
楼主要求代码?
长安宁 2008-07-22
  • 打赏
  • 举报
回复
int main(void) 
{
int a[N][N] = {0};
int *p = &a[0][0];
int i, j,max=0;

for (i=0; i <N; i++)
{
for (j=0;j <N; j++)
{
scanf("%d", a[i]+j);
if(max<*(a[i]+j))
{
max = a[i][j]; //这个max就是最大值
}
}
}

printf("%d\n", max);
return 0;
}

int MAXVALUE(int **p)//找出最大值
{

}
e_sharp 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chlaws 的回复:]
数组内存排列顺序是直线型的,实际中的N*N的2数组非你想象的N行N列而是N*N个单位的直线排列,因为地址连续,所以可以用指针递增来访问
[/Quote]
活胖子 2008-07-22
  • 打赏
  • 举报
回复
头地址都一样,明白了毫无难度。
  • 打赏
  • 举报
回复
楼主注意一下,输入的时候只有char数组才不用加&,别的最好加上&不然很容易出现无法预料的错误哦!~
  • 打赏
  • 举报
回复
实现方法很多的

#include <stdio.h>
#include <stdlib.h>
#define N 2

int MAXVALUE(int **p);
int max(int (*p)[N]);
int maxs(int p[N][N]);

int main(void)
{
int a[N][N] = {0};
int *p = &a[0][0];
int i, j;

printf("Please input %d numbers.\n",(N * N));
for (i = 0; i < N; i++)
{
for (j = 0;j < N; j++)
{
scanf("%d", &a[i][j]);
}
}

printf("The max is ");
printf("%d\n", MAXVALUE(&p));
printf("(%d)\n",max(p));
printf("<%d>\n",maxs(p));

return 0;
}

/* 找出最大值 */
int MAXVALUE(int **p)
{
int max = *p[0];
int i;

for(i = 1;i < (N * N);i++)
if((*p)[i] > max)
{
max = (*p)[i];
}

return max;
}

int max(int (*p)[N])
{
int max = p[0][0];
int i,j;

for(i = 0;i < N;i++)
{
for(j = 0;j < N;j++)
{
if(max < p[i][j])
{
max = p[i][j];
}
}
}

return max;
}

int maxs(int p[N][N])
{
int max = p[0][0];
int i,j;

for(i = 0;i < N;i++)
{
for(j = 0;j < N;j++)
{
if(max < p[i][j])
{
max = p[i][j];
}
}
}

return max;
}
活胖子 2008-07-22
  • 打赏
  • 举报
回复

int MAXVALUE(int *p)
{
int max=*p,i;
for(i=1;i <N*N;i++)
if(*(p+i)>max)
max=*(p+i);
return max;
}

所谓2维数组其实是一维的,可以直接用。a[N][N]你可以看成a[N*N]数组来处理。
为什么子函数不是char *P

printf("%d\n", MAXVALUE(p));
chlaws 2008-07-22
  • 打赏
  • 举报
回复
数组内存排列顺序是直线型的,实际中的N*N的2数组非你想象的N行N列而是N*N个单位的直线排列,因为地址连续,所以可以用指针递增来访问

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧