| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:一个数组的小题目,来个人指点下错误。
只看楼主 加入收藏
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
结帖率:90.48%
收藏
已结贴  问题点数:20 回复次数:7 
一个数组的小题目,来个人指点下错误。
看到别人的一个求一个数组中的奇数和与偶数和的差得问题,要求是用指针来做。我试着编写一下,因为没有在家里,所以没有编译器来验证时不是正确。请大家帮忙看下:
#include <stdio.h>                  
#define n 10
void main()                                      这边是用指针的思路
{int a[n],jihe,ouhe.i;                这里多定义一个            *P
 jihe=0;
 ouhe=0;
 i=0;                                  给指针变量赋值          *P=a;
 for(;i<n;i++)
 scanf("%d",&a[i])      这里我用scanf("%d",*p++)是不是一样的能输入这个数组?还是说输入的时候不正确?
 printf("the str is:");      
 for(i=0;i<n;i++)            首先把指针再指向a[0]的地址           *P=a;
 printf("%d\n",a[i]);    如果上面是正确的话那这里用指针输出是不是 printf("%d\n",*p++);
 for(i=0;i<n;i++)                那么这里                        for(i=0;i<n;i++)
  {if (a[i]%2==1)          那么这里怎么样套用指针*p来代替a[i]呢?难道是用 *(*p++)                  
     jihe=jihe+a[i];
   if (a[i]%2==o)
       ouhe=ouhe+a[i];
     }
  printf("集合与偶合的差为:%d\n",jihe-ouhe);
 getchar();
}
左边这个应该是正确的,右边那个我就不大知道怎么搞了。
搜索更多相关主题的帖子: 编译器 include 
2009-11-09 19:50
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:20 
程序代码:
#include<stdio.h>
#define n 10

int main()
{
    int a[n],jihe,ouhe,i,*p;
    jihe=0;
    ouhe=0;
    p=a;
    for(i=0;i<n;i++)
    {
        scanf("%d",p+i);
    }
    printf("The str is\n:");
    for(i=0;i<n;i++)
        printf("%d\n",*(p+i));
    for(i=0;i<n;i++)
    {
        if(*(p+i)%2==1)
            jihe=jihe+*(p+i);
        if(*(p+i)%2==0)
            ouhe=ouhe+*(p+i);    
    }
    printf("集合与偶合的差为:%d\n",jihe-ouhe);
    getchar();    
}
2009-11-09 20:11
xiaotutu6000
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:85
专家分:137
注 册:2009-10-30
收藏
得分:0 
#include <stdio.h>                  
#define n 10
void main()                                      //这边是用指针的思路
{
    int a[n],jihe,ouhe,i;                //这里多定义一个            *P
    jihe=0;
    ouhe=0;                           //给指针变量赋值          *P=a;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }      //这里我用scanf("%d",*p++)是不是一样的能输入这个数组?还是说输入的时候不正确?
    printf("the str is:");
   
    for(i=0;i<n;i++)
    {//首先把指针再指向a[0]的地址           *P=a;
    printf("%d\n",a[i]);
    }//如果上面是正确的话那这里用指针输出是不是 printf("%d\n",*p++);
    for(i=0;i<n;i++)                //那么这里                        for(i=0;i<n;i++)
    {
        if (a[i]%2==1)   
        {//那么这里怎么样套用指针*p来代替a[i]呢?难道是用 *(*p++)                  
            jihe=jihe+a[i];
        }
        if (a[i]%2==0)
        {
            ouhe=ouhe+a[i];
        }
    }
    printf("集合与偶合的差为:%d\n",jihe-ouhe);

}
运行起来已经没错了~!
2009-11-09 20:12
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
回复 2楼 zhangxf1989
include<stdio.h>
#define n 10

int main()
{
    int a[n],jihe,ouhe,i,*p;
    jihe=0;
    ouhe=0;
    p=a;
    for(i=0;i<n;i++)
    {
        scanf("%d",p+i);
    }                                 
    printf("The str is\n:");
    for(i=0;i<n;i++)
        printf("%d\n",*(p+i));   这里是不是在前面需要再重新让指针  *p=a  赋值一下啊?要补指向的地址好像已经不是a[0]了吧?
    for(i=0;i<n;i++)         然后是这里也是要再让指针  *p=a  这样赋值一下吧?      
    {
        if(*(p+i)%2==1)          这里疑问一下  *(p+i)是不是等于*(*p++)?是不是都是已经指向地址里面的元素了?
            jihe=jihe+*(p+i);
        if(*(p+i)%2==0)
            ouhe=ouhe+*(p+i);   
    }
    printf("集合与偶合的差为:%d\n",jihe-ouhe);
    getchar();   
}
2009-11-09 20:23
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
回复 4楼 李若斌
你看看整个过程中p的值变过没有,我一直都是在用p+i,所以p的值没有改动过
*p++的意思是先引用p所指向的元素,然后再将p自增,指向数组的下一个元素。*(*p++)显然是一种错误的用法。

[ 本帖最后由 zhangxf1989 于 2009-11-9 21:28 编辑 ]
2009-11-09 21:21
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
回复 5楼 zhangxf1989
那是不是改成*p++就是正确的,用* (*p++)意思是不是指向P本来指向的地址的下一个元素的地址?
2009-11-09 22:18
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
程序代码:
//用*p++可以这样改

#include<stdio.h>
#define n 10

int main()
{
    int a[n],jihe,ouhe,i,*p;
    jihe=0;
    ouhe=0;
    p=a;
    for(i=0;i<n;i++)
    {
        scanf("%d",p++);
    }
    p=a;
    printf("The str is\n:");
    for(i=0;i<n;i++)
        printf("%d\n",*p++);
    p=a; 
    for(i=0;i<n;i++)
    {
        if(*p%2==1)
            jihe=jihe+*p;
        if(*p%2==0)
            ouhe=ouhe+*p;
        p++;
    }
    printf("集合与偶合的差为:%d\n",jihe-ouhe);
    getchar();    
}


关于*(*p++)举个例子吧,如有以下语句:
int a[]={1,2,3},*p;
p=a;
a=*p++; 这里a=1,因为p++是先引用再自增,这句就相当于a=*p;p++;这两句。然后你再来一个*(*p++)不就相当于*a吗,显然a不是一个指针,所以这样用是错误的!


2009-11-09 22:57
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
回复 7楼 zhangxf1989
谢谢你的解释 ,明白了,刚才把一维数组想成二维数组的问题去考虑了。多谢解答
2009-11-09 23:09
快速回复:一个数组的小题目,来个人指点下错误。
数据加载中...
 
   



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

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