鱼C论坛

 找回密码
 立即注册
查看: 1543|回复: 5

[已解决]指针加1带括号和不带括号区别?*(p+1) 。*p+1

[复制链接]
发表于 2020-1-7 22:00:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        int arra[5] = { 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,。。。。。
有括号和没括号的指针到底有啥区别?

求大神赐教~
最佳答案
2020-1-7 22:38:19
本帖最后由 jackz007 于 2020-1-7 22:42 编辑

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

        * (p + 1) : p 是指向整型数的指针,p 的步进单位是 4 个字节(1 个整型数占用的内存字节数) ,与一维整型数组元素的内存步进单位相一致。由于 p 指向了 array[0],所以,* p = array[0],* (p + 1) = array[1],* (p + 2) = array[2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 22:38:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-1-7 22:42 编辑

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

        * (p + 1) : p 是指向整型数的指针,p 的步进单位是 4 个字节(1 个整型数占用的内存字节数) ,与一维整型数组元素的内存步进单位相一致。由于 p 指向了 array[0],所以,* p = array[0],* (p + 1) = array[1],* (p + 2) = array[2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 10:17:44 | 显示全部楼层
jackz007 发表于 2020-1-7 22:38
* p + 1   : 运算符 * 的优先级高于 +,所以,* p + 1 是对指针所指的整数的值加 1,p 指向 array  ...

太感谢呢,迷惑我多时的问题一下子天地开阔,尤其我之前一直没觉得运算符的优先级问题,以后可以用优先级自己去解决很多问题呢,再次感谢指点~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

      pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的总字节数。所以,pa 只适合用在 struct banana 型结构数组上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 15:30:08 | 显示全部楼层
jackz007 发表于 2020-1-9 15:19
pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的 ...

原来如此~~~~感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 06:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表