标题:数组与指针的问题
只看楼主
fortunecjs
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2012-4-21
结帖率:50%
已结贴  问题点数:20 回复次数:1 
数组与指针的问题
前面4各数顺序向后移4个位置,最后4个数变成最前面的4个数

#include<stdio.h>
#define n 8
void main()
{
    int a[n];
//    int b[n];
    int *p;
    int *s1,*s2;
    int i,j,m;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    p=a;
    printf("please input the m:\n");//当m=4时
    scanf("%d",&m);
    s1=p;
    s2=(p+n-m);
    printf("%d\n",*s2);

    for(i=n-m;i<n;i++)
        a[i]=*s1++;
    for(i=n-m;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");

    for(j=0;j<m;j++)
        a[j]=*s2++;
    for(j=0;j<m;j++)
        printf("%d ",a[j]);
    printf("\n");

    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");

}
当m=4时这个程序,为什么是错的,而把数组改成#include<stdio.h>
#define n 8
void main()
{
    int a[n];
    int b[n];
    int *p;
    int *s1,*s2;
    int i,j,m;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    p=a;
    printf("please input the m:\n");
    scanf("%d",&m);
    s1=p;
    s2=(p+n-m);
    printf("%d\n",*s2);

    for(i=n-m;i<n;i++)
        b[i]=*s1++;
    for(i=n-m;i<n;i++)
        printf("%d ",b[i]);
    printf("\n");

    for(j=0;j<m;j++)
        b[j]=*s2++;
    for(j=0;j<m;j++)
        printf("%d ",b[j]);
    printf("\n");

    for(i=0;i<n;i++)
        printf("%d ",b[i]);
    printf("\n");

}
就可以了,为什么?
搜索更多相关主题的帖子: include please 
2012-05-03 11:43
ln6265431
Rank: 5Rank: 5
等 级:职业侠客
帖 子:66
专家分:325
注 册:2012-3-29
得分:20 
第一个你先把数组a前四位的值赋给a后四位,显然后四位原来的值已经被取代消失了,而你又把后四位的值赋给前四位(后四位的值已经是前四位的值)显然不对。
2012-05-03 20:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366865-1-1.html




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

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