woaini92887 发表于 2014-12-6 13:18:13

指针数组和数组

# include <stdio.h>


void main()
{
        int a={9,8,7,6,4,5,63,52,14,53};
        int *b;
        int i;
        *b=a;
        for(i=0;i<10;i++)
                printf("%d\n",b);
}

语法没错 怎么输出有错
那里错了呀{:5_99:}

只爱你一人 发表于 2014-12-6 15:01:07

我学的C++,C的输出语句我不懂,但指针数组*b表示数组b里有10个指针元素,那么*b=a;这条语句是不是有问题?

woaini92887 发表于 2014-12-6 15:04:48

只爱你一人 发表于 2014-12-6 15:01
我学的C++,C的输出语句我不懂,但指针数组*b表示数组b里有10个指针元素,那么*b=a;这条语句是不是有问 ...

应该不会把*b是一个一级指针*b[]这里面的b 是一个二级指针

Victory_6226 发表于 2014-12-6 23:36:19

本帖最后由 Victory_6226 于 2014-12-6 23:39 编辑

int *b是代表指针数组啊,表示10个指针

printf("%d\n",b)这句只能打印出第一个元素b的指向的数组名a的地址吧,其他9个都是野地址吧,你可以验证下如下代码

# include <stdio.h>


void main()
{
      int a={9,8,7,6,4,5,63,52,14,53};
      int *b;
      int i;
      *b=a;
      printf("%d\n",a);
      for(i=0;i<10;i++)
                printf("%d\n",b);
      getchar();
}

只爱你一人 发表于 2014-12-7 11:48:26

数组名是其第一个元素的地址,那么对指针数组b 解引用(*b)得到的就是它的第一个元素 b的地址
*b = a;这句实际上是把数组a 赋给了b,
那么b,b,b……它们都没有正确的值(你定义指针时没有初始化),也就是楼上的大大说的野值!

woaini92887 发表于 2014-12-7 11:58:52

只爱你一人 发表于 2014-12-7 11:48
数组名是其第一个元素的地址,那么对指针数组b 解引用(*b)得到的就是它的第一个元素 b的地址
*b = a; ...

嗯后来又想通了谢谢拉

风之残月 发表于 2014-12-8 11:20:08

用指针实现
#include <stdio.h>

void main()
{
      int a={9,8,7,6,4,5,63,52,14,53};
      int i;
      int *b= a;
      for(i=0;i<10;i++)
                printf("%d\n",b);
}


用指针数组实现
#include <stdio.h>

void main()
{
      int a={9,8,7,6,4,5,63,52,14,53};
      int *b;
      int i;
      for(i=0;i<10;i++)
                {
                        b = &a;
            printf("%d\n",*b);
                }
}

tlwangxd 发表于 2014-12-8 14:21:48

学习

cady 发表于 2014-12-9 21:52:24

风之残月   正解

小菜变白菜 发表于 2014-12-12 09:52:19


风之残月   确实是正解

月光虾 发表于 2014-12-13 16:28:46

多看求助贴,涨知识{:5_108:}
页: [1]
查看完整版本: 指针数组和数组