| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:一个简单的指针问题。
只看楼主 加入收藏
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
结帖率:0
收藏
 问题点数:0 回复次数:8 
一个简单的指针问题。
下面这个程序是:输入一个二维数组即矩阵,然后将该矩阵输出,并通过sum函数将矩阵中的所有元素求和。
#include "stdio.h"
#define N 2
int sum(int *p)
{
   int i,j,s=0;
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      s+=*((p+i)+j);
     return s;
}
void main()
{
    int i,j,a[N][N];
    printf("input the array:\n");
    for(i=0;i<N;i++)
     for(j=0;j<N;j++)
      scanf("%d",&a[i][j]);
    printf("输出矩阵:\n");
    for(i=0;i<N;i++)
     {for(j=0;j<N;j++)
       printf("%4d",a[i][j]);printf("\n");
     }
    printf("矩阵中元素之和为:%d\n",sum(a[0]));
}
程序没有语法错误,但是运行的时候,结果好像有点不太对,结果如图1
1.zip (2.62 KB)
所示。大家帮忙看看,并指出问题所在,不胜感激。
搜索更多相关主题的帖子: 指针 
2010-07-01 12:53
lzdrifter
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-07-01 12:58
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
收藏
得分:0 
可能是,我的算法应该没有错,但是运行结果错了,所以肯定是指针执行过程中出错,后来改用数组实现,结果无误.所以指针肯定用错了!还请多多指点,谢谢了
2010-07-01 14:10
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:0 
求和函数改了一下,看可以不:
int sum(int *p)
{
    int i,j,s=0;
    for(i=0;i<N*2;i++)
            s+=*(p+i);
        return s;
}
2010-07-01 14:27
zxf12604
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-11-3
收藏
得分:0 
#include "stdio.h"
#define N 2
int sum(int *p)
{
   int i,j,s=0;
   for(i=0;i<N*N;i++)
          s+=*p++;
   
     return s;
}
void main()
{
    int i,j,a[N][N];
    printf("input the array:\n");
    for(i=0;i<N;i++)
     for(j=0;j<N;j++)
      scanf("%d",&a[i][j]);
    printf("输出矩阵:\n");
    for(i=0;i<N;i++)
     {for(j=0;j<N;j++)
       printf("%4d",a[i][j]);printf("\n");
     }
    //int (*p)[N][N]=&a[0][0];
    printf("矩阵中元素之和为:%d\n",sum(a[0]));
}

[ 本帖最后由 zxf12604 于 2010-7-1 15:11 编辑 ]
2010-07-01 15:09
huiming
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-8
收藏
得分:0 
s+=*((p+i)+j);
这里错了
int sum(int (*p)[N])
{
   int i,j,s=0;
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      s+=*(*(p+i)+j);
     return s;
}

int sum(int *p)
{
   int i,j,s=0;
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      s+=*(p+i*N+j);
     return s;
}
int sum(int *p)
{
   int i,j,s=0;
   for(i=0;i<N*N;i++)
          s+=*p++;
   
     return s;
}



 
2010-07-01 16:31
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
收藏
得分:0 
谢谢各位了,回去试一下
2010-07-02 08:34
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
收藏
得分:0 
该怎么改呢?请问?
2010-07-02 14:25
key8714
Rank: 2
等 级:论坛游民
帖 子:48
专家分:87
注 册:2010-6-9
收藏
得分:0 
#include "stdio.h"
#include<stdlib.h>
#define N 2
int sum(int *p)
{
   int i,j,s=0;
   for(i=0;i<N*2;i++)
          s+=*p++;
     return s;
}
int main()
{
    int i,j,a[N][N];
    printf("input the array:\n");
    for(i=0;i<N;i++)
     for(j=0;j<N;j++)
      scanf("%d",&a[i][j]);
    printf("输出矩阵:\n");
    for(i=0;i<N;i++)
     {for(j=0;j<N;j++)
       printf("%4d",a[i][j]);printf("\n");
     }
    printf("矩阵中元素之和为:%d\n",sum(a[0]));
    system("pause");
}
正确已经调试
2010-07-02 21:47
快速回复:一个简单的指针问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015624 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved