2023-07-25 广告
*(p++) 取(p+1)处地址的值。
*(++p) 取(p+1)处地址的值。和上面一样。
*++p 取(p+1)处地址的值。和上面一样。
*p++ 唯一不同的一个,先取p地址处的值,再对p执行+1。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
特点:
1、C语言是一个有结构化程序设计、具有变量作用域以及递归功能的过程式语言。
2、C语言传递参数均是以值传递,另外也可以传递指针。
3、不同的变量类型可以用结构体组合在一起。
4、只有32个保留字,使变量、函数命名有更多弹性。
5、部份的变量类型可以转换,例如整型和字符型变量。
6、通过指针,C语言可以容易的对存储器进行低级控制。
7、预编译处理让C语言的编译更具有弹性。
int a[5]={1,2,3,4,5};
int *p = a;
*p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1;
cout << *p++; // 结果为 1
cout <<(*p++); // 1
(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2
cout << (*p)++; // 1
cout <<((*p)++) //2
*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值
cout << *++p; // 2
cout <<(*++p) //2
++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)
cout <<++*p; // 2
cout <<(++*p) //2
注意,上面的每条cout输出,要单独输出才能得到后面的结果。
2017-11-13
推荐你亲自动手实验一下,我的思路是首先你要知道符号的优先级,如果是指针的话,++则表示所指对象的下一个元素,++(*p)则表示将p指针所指向的对象自增,所以遇到这种情况,不要吝啬括号的使用。
比如说
int i[3] = {1, 3, 5};
int *p = i;
*p++; // 表示 *p = i[0+1] = i[1] = 3;
(*p)++; // 由上条的语句知,p指向i[1],(*p)++则表示 i[1]++,即i[1] = 3+1 = 4
// *++p 分析同 *p++
// ++*p 分析同 (*p)++
//可以自己去编译器中实验