none
又一个指针问题 RRS feed

  • 问题

  •  array<double>^ data = {1.5, 3.5, 6.7, 4.2, 2.1};
     interior_ptr<double> pstar = &data[0];    //把数组的第一位内存地址赋值给内部指针
     interior_ptr<double> pend = &data[data->Length - 1];   //把数组的最后一位地址赋值给指针

     double sum = 0;

     while(pstar <= pend)         //pstar的地址比pend小就继续循环
      sum += *pstar++; 

    我定义了内部指针 这里有疑问的地方是
    sum += *pstar++; 这一句 既然指针*pstar是一个解除引用的指针 进行运算的 那么为什么这个指针得到的不是数组里面的数值?而是地址? 而且他++的是地址 并不是把数据自增

    我想问的是 到底这个*pstar++;为什么指向的是地址? 详细的过程告诉我一下吧!!谢谢


    法拉利 法拉利 法拉利
    2009年6月20日 5:13

答案

  • ++肯定是操作地址阿.它是作用在地址上的.最好用的时候以后加括号*(pstr++)这样就清楚多了.
    还有double型变量是没有++这个运算符的,double型++会直接编译出错
    0xBAADF00D
    2009年6月21日 5:31
    版主

全部回复

  • 运算符的优先级问题。
    ++比*更优先
    2009年6月20日 8:45
  • 指针的自加(++)和数据是不一样的,只有优先级一样.

    比如a[0]的地址是0x0000FF00,然后a是一个double型的, 若b = ++a,那么b的地址就是0x0000FF08, 每次是加一个该变量类型大小的地址长度,而非加一.所以b就是现在指向a[1]的指针.


    sum += *pstar++; 这个东西写的清楚些就是sum = sum + pstar[0]; pstar = pstar + 1;(现在的pstar就是原来的pstar[1]了)
    0xBAADF00D
    2009年6月20日 11:05
    版主
  • 指针的自加(++)和数据是不一样的,只有优先级一样.

    比如a[0]的地址是0x0000FF00,然后a是一个double型的, 若b = ++a,那么b的地址就是0x0000FF08, 每次是加一个该变量类型大小的地址长度,而非加一.所以b就是现在指向a[1]的指针.


    sum += *pstar++; 这个东西写的清楚些就是sum = sum + pstar[0]; pstar = pstar + 1;(现在的pstar就是原来的pstar[1]了)
    0xBAADF00D

    不是你说的这样!!!首先你要知道* 这个的含义!!这个是解除引用用来数值算术运算用的 不是地址用的地址用& 运算符 看清点!!我知道++就是地址增加 但是请你看清楚是星号 不是 地址符&
    法拉利 法拉利 法拉利
    2009年6月20日 11:46
  • 运算符的优先级问题。
    ++比*更优先

    我不敢肯定这个就是正确答案!!不过给我的感觉 应该是这样 ++比*优先级要高 所以指针先自增 然后再用间接运算符解除引用进行数值运算!!应该是这样吧? 大牛们 这个答案是不是这样啊?
    法拉利 法拉利 法拉利
    2009年6月20日 11:49
  • 指针的自加(++)和数据是不一样的,只有优先级一样.

    比如a[0]的地址是0x0000FF00,然后a是一个double型的, 若b = ++a,那么b的地址就是0x0000FF08, 每次是加一个该变量类型大小的地址长度,而非加一.所以b就是现在指向a[1]的指针.


    sum += *pstar++; 这个东西写的清楚些就是sum = sum + pstar[0]; pstar = pstar + 1;(现在的pstar就是原来的pstar[1]了)
    0xBAADF00D

    意思是不是 指针的++只是对地址起到作用!而不是对数据起到作用是不是这样啊?
    那么我这样写
    interior_prt<double> pst = 10.0;
    pst++;

    这样的话到底是数据增加了 还是地址增加了?
    法拉利 法拉利 法拉利
    2009年6月20日 12:11
  • 后置++为最高优先级操作符
    具体参考
    http://www.cppreference.com/wiki/operator_precedence


    麻烦把正确答案设为解答。
    2009年6月20日 15:24
    版主
  • 后置++为最高优先级操作符
    具体参考
    http://www.cppreference.com/wiki/operator_precedence


    麻烦把正确答案设为解答。

    那到底是 优先级的问题还是 ++运算符根本不能操作这里的数据 只能操作地址?说清楚点哇 谢谢
    法拉利 法拉利 法拉利
    2009年6月21日 4:06
  • ++肯定是操作地址阿.它是作用在地址上的.最好用的时候以后加括号*(pstr++)这样就清楚多了.
    还有double型变量是没有++这个运算符的,double型++会直接编译出错
    0xBAADF00D
    2009年6月21日 5:31
    版主