鱼C论坛

 找回密码
 立即注册
查看: 1543|回复: 8

[已解决]各位大神,请问下:我这段代码为什么不能正确输出数组元素?Thanks!

[复制链接]
发表于 2017-4-9 19:34:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 GSMNC 于 2017-4-9 19:53 编辑
#include <stdio.h>


int main()
{
    int i, j;
    int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int* p;
    p = array;

    for (i = 0; i < 3; i++)
    {

        for (j = 0; j < 4; j++)
        {
            printf("%d  ", (*(p + i) + j));

        }
    }

    return 0;
}
最佳答案
2017-4-9 19:56:40
#include <stdio.h>


int main()
{
        int i, j;
        int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        //int* p;
        int (*p)[4];
        p = array;

        for(i = 0; i < 3; i++)
        {

                for(j = 0; j < 4; j++)
                {
                        //printf("%d  ", (*(p + i) + j));
                        printf("%d  ", *(*(p + i) + j));

                }
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-9 19:56:40 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>


int main()
{
        int i, j;
        int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        //int* p;
        int (*p)[4];
        p = array;

        for(i = 0; i < 3; i++)
        {

                for(j = 0; j < 4; j++)
                {
                        //printf("%d  ", (*(p + i) + j));
                        printf("%d  ", *(*(p + i) + j));

                }
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 20:04:26 | 显示全部楼层

谢谢您!
输出时加*可以理解,但有一点不太理解:为什么指针p要这样设置才起作用?
int (*p)[4];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 20:14:23 | 显示全部楼层
GSMNC 发表于 2017-4-9 20:04
谢谢您!
输出时加*可以理解,但有一点不太理解:为什么指针p要这样设置才起作用?

p 加1时,需要指向下一个   有4个元素的数组
#include <stdio.h>


int main()
{
        int i, j;
        int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        int (*p)[4];
        p = array;

        for(i = 0; i < 3; i++)
        {
                printf("%d  ", **(p + i));
        }

        return 0;
}
1  5  9  请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 20:20:59 | 显示全部楼层
人造人 发表于 2017-4-9 20:14
p 加1时,需要指向下一个   有4个元素的数组

嗯嗯,学到了,感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 21:28:37 | 显示全部楼层
#include <stdio.h>


int main()
{
    int i, j;
    int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int(*p)[4] = {NULL};//这里int *p = array 是错误的
    p = array;

    for (i = 0; i < 3; i++)
    {

        for (j = 0; j < 4; j++)
        {
            printf("%d  ", *(*(p + i) + j));

        }
    }

    return 0;
}

/*p是指向int 变量的指针,array 是二维数组array[3][4]的数组名,也是此二维数组的首地址,但是这个首地址的数据类型与p指针的数据类型是不同的,array 做为指针类型保存的是array[0]的地址,而array[0]做为指针类型保存的是array[0][0]变量的地址,所以说指针p 与 array[0] 数据类型是相同的,p = array[0]这个表达式是正确的,array是指向指针的指针的数据类型,在本例中要用行指针与之相对应。就这么多,希望对你有帮助*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 21:39:15 | 显示全部楼层

嗯嗯,谢谢您!
另外,可不可以这样理解:
如果array是一维数组名,那么" p = array; " 是正确的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 21:41:33 | 显示全部楼层
对,array 如果是一维数组名,p = array 就正确了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 21:48:56 | 显示全部楼层
ljd884497 发表于 2017-4-9 21:41
对,array 如果是一维数组名,p = array 就正确了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表