2 u013238282 u013238282 于 2013.12.21 20:10 提问

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

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

3个回答

DoctorCZM
DoctorCZM   2013.12.23 11:05
已采纳

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

m221539
m221539   2013.12.21 23: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这块地址的值

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

qq_35532414
qq_35532414 非常感谢,现在没那么难懂了,大神,讲的怎么透彻,谢谢
一年多之前 回复
u013238282
u013238282 谢谢,明白了一点点。
大约 4 年之前 回复
renzhen2010
renzhen2010   2013.12.21 20: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].

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

u013238282
u013238282 谢谢!那*pa++ *(pa++) *(++pa) (*pa)++分别 表示什么意思,它们之间各有什么区别? 嗯。。。。。。如果我有一个语句,pa++,则表示pa增加1后,pa指向当前数组的下一个元素,为什么是这样子呢?pa不是一个指针(地址)吗?那pa++则应该只表示地址增加1啊?谢谢你为我解答。
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!