鱼C论坛

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

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

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

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

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

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


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

  8.     for (i = 0; i < 3; i++)
  9.     {

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

  13.         }
  14.     }

  15.     return 0;
  16. }
复制代码
最佳答案
2017-4-9 19:56:40
  1. #include <stdio.h>


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

  9.         for(i = 0; i < 3; i++)
  10.         {

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

  15.                 }
  16.         }

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

使用道具 举报

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


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

  9.         for(i = 0; i < 3; i++)
  10.         {

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

  15.                 }
  16.         }

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

使用道具 举报

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

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

使用道具 举报

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

p 加1时,需要指向下一个   有4个元素的数组

  1. #include <stdio.h>


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

  8.         for(i = 0; i < 3; i++)
  9.         {
  10.                 printf("%d  ", **(p + i));
  11.         }

  12.         return 0;
  13. }
复制代码

  1. 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-5-20 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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