50.C语言 *p++/*(p)++/*(p++)/*p++

最后更新于:2020-08-30 23:09:55

*p++/*(p)++/(p++)/p++`运算规律:

1.如果 *++/--都在指针变量的左边,结合方向为从右到左;

2.如果 *++/--分别在指针变量的左边/右边,结合方向为从左到右;

3.有括号的先执行括号的表达式,然后在执行规律1或者规律2;

A = 第一步 第二步 得到计算结果
*p++ *p p++ 先取值,后指针++,A = *p;
*++p ++p *(++p) 先指针++,后取值, A = *(++p);
++*p *p (*p)+1 先取值,后值++ ,A = (*p)+1;
(*p)++ *p (*p)+1 先取值,后值++ ,A = (*p)+1;

一.*p++

由于++*分别在指针变量的左右两边,结合方向为自左向右,因此它等价与(*p)++。先引用p的值,实现*p的运算,然后再使p地址自增1

/************************************************************************/
/*@文件名           : *p++/*(p)++/*(p++)/*p++.cpp
/*@日期             : 2020/08/30 09:52
/*@作者             : 猿说编程
/*@公众号           : 猿说编程
/*@博客             : www.shuopython.com
/*@描述             : C语言教程 - *p++/*(p)++/*(p++)/*p++
/************************************************************************/

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

int main()
{
    int array[] = { 1,2,3,4 };
    int *p = array;
    printf("*p++ = %d \n", *p++); //先计算*p ,注意: i++ 与 ++i 区别
    printf("*p = %d \n", *p);//由于*p++计算之后,p地址偏移+1,所以 *p = 2

    system("pause");
    return 0;
}

/*
输出:
*p++ = 1
*p = 2
请按任意键继续. . .

*/

二.*++ p/++ *p

由于++*都在指针变量的左边,结合方向为自右向左,因此它等价与*(++p)或者++(*p)

/************************************************************************/
/*@文件名           : *p++/*(p)++/*(p++)/*p++.cpp
/*@日期             : 2020/08/30 09:52
/*@作者             : 猿说编程
/*@公众号           : 猿说编程
/*@博客             : www.shuopython.com
/*@描述             : C语言教程 - *p++/*(p)++/*(p++)/*p++
/************************************************************************/

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

int main()
{
    int array[] = { 1,2,3,4 };
    int *p = array;
    printf("*++p = %d \n", *++p);//先将指针地址偏移+1,在取值

    p = array;
    printf("++*p = %d \n", ++*p);//先对指针取值,在对值做自加运算

    system("pause");
    return 0;
}

/*
输出:
*++p = 2
++*p = 2
请按任意键继续. . .

*/

三.* (p++)与*(++p)

*(p++):先对进行运算,再使自加;

*(++p):先使自加,再进行运算;

上面的原理和变量 i++++i 的原理相同;



猜你喜欢

1. 三目运算符

2. 逗号表达式

3. NaN(Not a Number)

4. memcpy/strcpy/strcpy_s 区别

5. unicode 和多字节区别

6. 数组定义和使用

7. sizeof和strlen函数区别

8. Debug和_DEBUG区别

9. _WIN32/WIN32/_WIN64/WIN64区别

10. 判断exe可执行程序是32位的还是64位

11. 数组下标越界

12. 数组内存溢出

13. 数组下标越界和内存溢出区别

14. 二维数组行数和列数计算

15. 指针声明和定义

16. 指针p++/p-–



转载请注明: 猿说编程 » C/C++教程 » p++/(p)++/(p++)/p++

赞赏

微信赞赏支付宝赞赏