| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 994 人关注过本帖
标题:关于未指针数组赋值的问题
只看楼主 加入收藏
日寂
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2013-11-1
结帖率:81.82%
收藏
已结贴  问题点数:5 回复次数:13 
关于未指针数组赋值的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *PArray = NULL;
    int Total = 0,i = 0;

    printf("输入数组中元素的个数:\n");
    scanf("%d",&Total);
    PArray=(int *)malloc(Total*sizeof(int));
    for(i=0;i<Total;i++)
        scanf("%d",PArray++);
   
    for(i=0;i<Total;i++,PArray++)
        printf("%d",*PArray);
   
   
    printf("\n");

   
    return 0;
}//想请教这样给指针数组赋值存在什么问题?为什么输出会出错?
搜索更多相关主题的帖子: color 
2014-01-03 00:32
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:2 
for(i=0;i<Total;i++)
        scanf("%d",PArray++);    //这个for循环后PArray已经发生变化了,指向到了PArray+Total的位置
   
    for(i=0;i<Total;i++,PArray++)   //从PArray+Total开始,肯定不是你输入的数了
        printf("%d",*PArray);

总有那身价贱的人给作业贴回复完整的代码
2014-01-03 08:20
夏天天蓝
Rank: 2
等 级:论坛游民
帖 子:39
专家分:86
注 册:2013-12-30
收藏
得分:0 
同一楼上的观点,而且,还要注意一点,malloc申请了动态地址用完后记得free掉,养成好的习惯。
2014-01-03 11:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把malloc()分配的指針移動了,我看你怎麽返回去free()。這就叫爲用指針而強用,想省事反自找麻煩。

[ 本帖最后由 TonyDeng 于 2014-1-3 11:22 编辑 ]

授人以渔,不授人以鱼。
2014-01-03 11:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
截图20140103120434.png" border="0" />

授人以渔,不授人以鱼。
2014-01-03 12:18
夏天天蓝
Rank: 2
等 级:论坛游民
帖 子:39
专家分:86
注 册:2013-12-30
收藏
得分:1 
移动了应该可以再移回去吧,呵呵,我看楼主没有free所以提醒一下这个东东。
我也觉得这样麻烦,直接定义一个数组,然后把数组首地址传给指针就OK了,没必要非得用指针。

2014-01-03 14:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我沒把握被刷新過的指針移動回去後還能不能被free()正確使用,穩妥的辦法,是使用兩個指針,一個定位頭部不動,另一個負責移動,因爲實際的使用未必總能追踪移動歷史回溯。其實他本不需要移動指針,在scanf()中用(p+i)之類的東西就可以了。指針應用在恰當、使代碼看起來更清晰、優雅的地方,不是爲用而用的。

[ 本帖最后由 TonyDeng 于 2014-1-3 14:24 编辑 ]

授人以渔,不授人以鱼。
2014-01-03 14:11
夏天天蓝
Rank: 2
等 级:论坛游民
帖 子:39
专家分:86
注 册:2013-12-30
收藏
得分:0 
对,赞同版主说的。
2014-01-03 14:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
作爲猜想,free()能够釋放一塊内存(因爲malloc()分配的是一塊),那麽僅僅用地址是存儲不到塊尺寸的,那個指針内部應該還有某些暗藏信息,所以5樓的資料指出應使用malloc()返回的指針而不是隨便的(地址對即可)指針。把指針理解爲地址,我可不敢這麽托大。

授人以渔,不授人以鱼。
2014-01-03 14:32
日寂
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2013-11-1
收藏
得分:0 
回复 2楼 embed_xuel
谢谢指教

有妹故吾在。
2014-01-03 16:22
快速回复:关于未指针数组赋值的问题
数据加载中...
 
   



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

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