| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2024 人关注过本帖
标题:指针型二维数组,赋值后相互干扰,求解
取消只看楼主 加入收藏
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
指针型二维数组,赋值后相互干扰,求解
#include<stdio.h>
#include<stdlib.h>


int main()
{
    int *p,n,m,i,j,x,y;
    printf("输入魔方的阶数:");
    scanf("%d-%d",&n,&m);
   
    p=(int *)malloc(sizeof(int)*n*m);
   
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            *(p+i+j)=0;
            printf("%5d",*(p+i+j));
        }
        printf("\n");
    }
   
   
   
    x=0;
    y=m/2;
   
   
    *(p+x+y)=1;
   
    printf("\n\n");
   
    for(x=0;x<n;x++)
    {
        for(y=0;y<m;y++)
            printf("%10d",*(p+x+y));
        printf("\n");
    }
return 0;
}


以上为代码

我输入的是3-3的数组,数组初始化全部赋予0,打印出来是这样子的
0   0   0
0   0   0   
0   0   0

将*(p+0+1)=1后,我希望得到的是
0   1   0
0   0   0
0   0   0

但实际出来的是
0   1   0
1   0   0
0   0   0

请教大神,是哪里出了问题?

[此贴子已经被作者于2018-7-7 21:55编辑过]

搜索更多相关主题的帖子: 指针 赋值 int printf for 
2018-07-07 21:27
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
收藏
得分:0 
回复 2楼 nosnoy
for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            *(p+i+j)=0;
            printf("%5d",*(p+i+j));
        }
        printf("\n");
    }

这个循环语句将二维数组所有的值赋值为0,将 *(p+i+j)=0 修改为 *(p+i+j)=j  ,显示的结果是正确的。

但下面的语句

*(p+x+y)=1;   这里的  x=0,y=1  ,将第一行,第二个数赋值为1。结果显示为
0  1  0
1  0  0
0  0  0

数组的第二行,第一列的值本来是为0的,但是也被改变为1。如果扩大数组的维度的话,那么一条斜线上的0都会被改变为1.  
2018-07-07 22:01
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
收藏
得分:0 
回复 5楼 nosnoy
代码修改成指针替代二维数组的方式,怎么修改呢?还望不吝赐教
2018-07-08 09:49
快速回复:指针型二维数组,赋值后相互干扰,求解
数据加载中...
 
   



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

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