指针加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: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 jackz007 发表于 2020-1-7 22:38
* p + 1 : 运算符 * 的优先级高于 +,所以,* p + 1 是对指针所指的整数的值加 1,p 指向 array...
太感谢呢,迷惑我多时的问题一下子天地开阔,尤其我之前一直没觉得运算符的优先级问题,以后可以用优先级自己去解决很多问题呢,再次感谢指点~~~~~~ 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;
} fiverhythm 发表于 2020-1-9 14:34
我可以再问个问题吗,就是结构体的地址是否也和数组地址是一样连续排列的?如果是,按理说,也可以按照数 ...
pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的总字节数。所以,pa 只适合用在 struct banana 型结构数组上。 jackz007 发表于 2020-1-9 15:19
pa 是 struct banana 型的指针,pa 增、减 1 个单位的步长是一个 struct banana 所占用内存空间的 ...
原来如此~~~~感谢~
页:
[1]