黑马程序员技术交流社区

标题: 指针不太明白,求助给个详细的,用法说明 [打印本页]

作者: 77媛儿    时间: 2014-3-12 16:53
标题: 指针不太明白,求助给个详细的,用法说明
int array[20];
int*ptr=array;
...
//此处略去为整型数组赋值的代码。
...
for(i=0;i<20;i++)
{
(*ptr)++;
ptr++;
}
解释下这段代码

作者: 牧之    时间: 2014-3-12 17:03
(*ptr)++是把ptr指向的地址里的数据+1,ptr++是把ptr指向的地址+1,即指向下一个地址。
for循环里面只要i满足条件就执行循环语句
作者: conpgy    时间: 2014-3-12 19:19
int *ptr = array;初始化指针,指向数组的第一个元素。(*ptr)++先执行括号里面的运算。就是数组元素的值加一。
ptr++就是指针向后一位,即指向下一个数组元素。所以整个for循环的作用就是使数组的所有元素的值加一。
作者: 菜鸟de无奈    时间: 2014-3-12 21:02
本帖最后由 菜鸟de无奈 于 2014-3-12 21:14 编辑

int array[20];  //定义了array这个一维数组,且数组长度为20
int*ptr=array;   //定义指针变量ptr指向array数组存储内容的首个地址
...
//此处略去为整型数组赋值的代码。
...
for(i=0;i<20;i++)  // 是否应该是for(int i = 0; i<20;i++)
{
(*ptr)++;   //对ptr指向的存储地址里的数据进行+1运算
ptr++; //对prt指向的存储地址进行+1运算等同于                //以上2个代码连起来的意思就是,先对ptr指向的数组首地址里的数据进行+1,然后在将ptr自身+1,用于循环对ptr指向地址里的内容进行+1
}


作者: 氯化钾    时间: 2014-3-12 21:59
其实你可以这么理解 (*ptr)++; 因为(*ptr)把里面的值取出来了 ++ 加的是(*ptr)+1  ;
而ptr++是把指针后移一个单位的长度 什么叫一个单位呢 就是你之前定义的int*ptr 就能看出来了。希望你能明白
作者: 四季列车    时间: 2014-3-13 14:41
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,int p定义一个整形的变量,用来存放整形数据,同理,int *p定义一个指针类型的变量,用来存放整形数据的地址,程序第2就是定义一个指针类型的变量,数组名就是数组第一个元素的地址,ptr+1,就是第一个元素的地址,ptr+2,就是第2个元素的地址,*(ptr+2),就是取出第2个元素的数据




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2