fiverhythm 发表于 2020-1-7 22:00:05

指针加1带括号和不带括号区别?*(p+1) 。*p+1

        int arra = { 1,5,999,84,65 };
        int* p = arra;



        cout << *p << *(p+1)<<*(p+2)<<endl;
        cout << *p << *p+1<< *p + 2<<endl;

为何一个输出是 1,5,999
一个输出是1,2,3,。。。。。
有括号和没括号的指针到底有啥区别?

求大神赐教~

jackz007 发表于 2020-1-7 22:38:19

本帖最后由 jackz007 于 2020-1-7 22:42 编辑

      * p + 1   : 运算符 * 的优先级高于 +,所以,* p + 1 是对指针所指的整数的值加 1,p 指向 array 的开头,也就是第一个元素,* p = array = 1,所以,* p + 1 = array + 1 = 2,* p + 2 = array + 2 = 3;

      * (p + 1) : p 是指向整型数的指针,p 的步进单位是 4 个字节(1 个整型数占用的内存字节数) ,与一维整型数组元素的内存步进单位相一致。由于 p 指向了 array,所以,* p = array,* (p + 1) = array,* (p + 2) = array

fiverhythm 发表于 2020-1-9 10:17:44

jackz007 发表于 2020-1-7 22:38
* p + 1   : 运算符 * 的优先级高于 +,所以,* p + 1 是对指针所指的整数的值加 1,p 指向 array...

太感谢呢,迷惑我多时的问题一下子天地开阔,尤其我之前一直没觉得运算符的优先级问题,以后可以用优先级自己去解决很多问题呢,再次感谢指点~~~~~~

fiverhythm 发表于 2020-1-9 14:34:31

jackz007 发表于 2020-1-7 22:38
* p + 1   : 运算符 * 的优先级高于 +,所以,* p + 1 是对指针所指的整数的值加 1,p 指向 array...

我可以再问个问题吗,就是结构体的地址是否也和数组地址是一样连续排列的?如果是,按理说,也可以按照数组的+1的方式顺序访问结构体的变量,但是我试了试发现不行,比如:
struct banana
{
    string 颜色="红色";
    string 质地="柔软";
    int 长度=10;
};



int main()
{
    banana a ;
    banana* pa = &a;

    cout << pa->颜色 << endl;
    cout << (*(pa + 1)).颜色<<endl;

    return 0;
}

jackz007 发表于 2020-1-9 15:19:44

fiverhythm 发表于 2020-1-9 14:34
我可以再问个问题吗,就是结构体的地址是否也和数组地址是一样连续排列的?如果是,按理说,也可以按照数 ...

      pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的总字节数。所以,pa 只适合用在 struct banana 型结构数组上。

fiverhythm 发表于 2020-1-9 15:30:08

jackz007 发表于 2020-1-9 15:19
pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的 ...

原来如此~~~~感谢~
页: [1]
查看完整版本: 指针加1带括号和不带括号区别?*(p+1) 。*p+1