u013238282
asdip138
2013-12-21 12:10
采纳率: 50%
浏览 2.4k
已采纳

C语言指针与一维数组的问题

最近刚学C语言程序设计,学到指针这一块时,觉得理解很吃力。可以麻烦大神能否详细给我说明一下指针吗?我知道指针也就是地址,但是在理解指针指向一维数组元素时,被弄得晕头转向。比如说,我定义 int a[10],*pa=a;
或int a[10],*pa=&a[10]; 时,a+i、pa+i、pa++ 分别表示什么意思?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • DoctorCZM
    寧靜以致遠 2013-12-23 03:05
    已采纳

    您好,关于指针个人有一些心得,下的网址
    http://blog.csdn.net/czmpersist/article/details/9288203
    将指针讲得比较详细,一步一步深入,希望对您有帮助,有什么问题可以留言的!

    点赞 评论
  • renzhen2010
    renzhen2010 2013-12-21 12:43

    指针是专用来存地址的变量;我定义 int a[10],*pa=a; pa就是一个指针,用来指向int类型变量,或称为保存int类型变量的地址; a是数组的起始地址;int pa=a;这样就可以用(pa++)来遍历数组了;
    int a[10],*pa=&a[10];这是不对的, 数组下标从0开始,a[0]~a[9].

    刚开始就是这样。建议将课本中的例子上机实验,再单步调试,观察。。。。
    其实很简单的。。

    点赞 评论
  • m221539
    m221539 2013-12-21 15:58

    指针的标准定义是一个变量的地址,这里我从另一个角度来理解,可能有问题,但我认为对理解指针有一定的帮助。

    指针的作用是建立一个映射关系,将一个地址和地址上的东西联系起来,就好比一块地和那块地上的房子,而指针就是房产证;
    比如
    int* a = NULL;
    当我这样申明的时候a是空白的,什么都没有,就如一张空白的房产证;

    然后,
    int b = 1;
    a = &b;
    这时我就建立了一个关系,a上面就记录了b的地址和b的值;
    a就表示b的地址,如果要取到b的值就需要用*a这样的表达方式,就如房产证上写明了地址和这栋房住了谁(值),房产证上的地址是存储b的地址,住的就是b的值;

    int a[10]又是什么意思呢?
    其实这里就产生了10张空白的房产证,房产证上的地址分别是a+0,a+1,a+2,....,a+9这十张,
    当我们这样做的时候:
    a[0] = 1,相当于就是把房产证a上填上了值是1;
    a[4] = 5, 相当于就是把房产证a+4上填上了值是5;
    所以在这里a是一个指针,a[10]就是说我申请了10张连号的房产证,也就是10个连续的指针;

    所以int* 就是一个最普通的指针,或者说一个指向一般值得指针,
    那int**又是啥呢,是一个指向地址的指针,那么拿房产证又怎么说呢,
    这时的房产证就比较特别了,首先它还是会记录一个地址,但就没有住的谁这个东西了,而是记录了另外一个地址,相当于这张证上同时记录了两个地址。如果非要拿实际打个比喻的话,可以理解成第一个地址记录了地皮的名字,第二个地址记录了房号,这样就可以找到你具体住哪里了;
    继续上面的:
    int b = 1;
    a = &b;
    int** c; //申明了一个指向地址的指针
    c = &a; //c指向了a的地址,也就是指向了存储{[b的地址]的地址}
    此时如果要用c取到b怎么办呢:
    先取到a,也就是*c,
    再取到b,也就是*(*c);
    连起来就是**c,就等于b,也就是1

    现在回到你提的问题:
    1.int a[10],*pa=a 时,
    这时pa应该是int**,因为它指向了int*;
    a+i 指 a[i]的地址,
    pa+i 在这里不确定是什么,是存储了a的地址的地址的第i块区域,是不确定的值
    pa++ ,也就是pa = pa + 1,将pa的值加了1,此时pa指向了存储了a的地址的地址的下一块区域,也是不确定的值
    2.int a[10],*pa=&a[10]时
    pa是int*,是指向a[10]的指针,即pa == a + 10,在这里你应该是想说a[9]吧,要从0开始
    a+i 同1指a[i]的地址
    pa+i 是a[10 + i],是指向a+10+i这块地址放的值的指针,
    pa++,pa = pa + 1,也就是吧pa自加1,pa此时指向了a+10这块地址的值

    以上有些表述不够严密,有错误的地方还希望指出改正

    点赞 评论

相关推荐