| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:动态数组定义问题[online]
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:20 回复次数:7 
动态数组定义问题[online]
    void check(int *p,int n);
    int *p1,n;
    printf("输入N个学生,打印出不及格学生的成绩\n");
    while(scanf("%d",&n)!=EOF)
    {
        p1=(int *)malloc(n * sizeof(int));
        for(int i=0;i<n;i++)
        {
            scanf("%d",p1++);                -----------这里用p1+i的方式输入结果是正确的(以4个字节存储)

            printf("%d ",p1++);              -----------但是用p1++的方式输入结果是错误,(以8个字节随机存储)
我想问下是什么原因导致这样的结果,原理是怎么样的。
如果是数组(a[i],*p=a)的话就可以以a+i,p++的方式输入,用*(a+i)和*(p++)输出。
搜索更多相关主题的帖子: online 动态 
2017-03-13 19:19
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:10 
printf("%d ",*p1);     
2017-03-13 19:21
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 ehszt
*p1结果也是不正确的,必须要用数组的方式输入输出才正确。我看了p1++这种是8个字节存储。p+i这种是4个字节存储
2017-03-13 19:26
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 3楼 Emotiona
刚试了,没问题呀
#include <stdio.h>
#include <stdlib.h>
main()
{
    int *p;
    p=(int *)malloc(5*sizeof(int));
    for(int i=0;i<5;i++)
    {
        scanf("%d",p++);
    }
    for(int i=0;i<5;i++)
    {
        printf("%d ",*--p);
    }
}
2017-03-13 19:32
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 4楼 ehszt
你帮我看看 我打印出来错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
    void check(int *p,int n);
    int *p1,n;
    printf("输入N个学生,打印出不及格学生的成绩\n");
    while(scanf("%d",&n)!=EOF)
    {
        p1=(int *)malloc(n * sizeof(int));
        for(int i=0;i<n;i++)
        {
            scanf("%d",p1++);

            printf("%d ",*p1++);
            //check(p1,n);
        }
    }
    return 0;
}
/*void check(int *p,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        //if(*(p++)<60)
        //printf("%d ",*(p++));
    }
}
*/
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-13 19:41
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
输入输出放在两个循环里,注意指针输入完位置变了。
建议用数组,因为数组名的位置是不变的。
2017-03-13 19:47
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:10 
你要打印刚输入的内容吗?
printf("%d ",*(p1 - 1));

未佩好剑,转身便已是江湖
2017-03-13 19:47
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 7楼 alice_usnet
谢谢!明白了地址加了4个字节
2017-03-13 19:57
快速回复:动态数组定义问题[online]
数据加载中...
 
   



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

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