1、*p
等同于 *p; p = 1;
代码语言:javascript复制#include <stdio.h>
int main(void)
{
int a[5] = {555, 444, 333, 222, 111};
int *p;
p = a;
// p = &a[0];
// p = 1;
//指针 1,表示指向下一格
printf("*p = %d.n", *p );
for (int i = 0; i < 5; i ){
printf("*p = %d.n", *(p i));
}
}
结果是:
代码语言:javascript复制*p = 555.
*p = 444.
*p = 333.
*p = 222.
*p = 111.
解释如下:
代码语言:javascript复制按运算符的优先级,*和 是同一优先级,从右往左结合,*p 也就相当于*(p ),但是 本身的含义是先运算在 1,运算就是说p 作为一个整体与前面的*进行运算;增加1指的是p 1,所以实际上*p 符号整体对外表现的值是*p的值,运算完后p再加1。
代码语言:javascript复制【注意】是运算后p再加1,而不是p所指向的变量*p再加1
2、* p
等同于 p = 1; *p;
代码语言:javascript复制 前置,指针先 1,然后取指针的值
代码语言:javascript复制#include <stdio.h>
int main(void)
{
int a[5] = {555, 444, 333, 222, 111};
int *p;
p = a;
// p = &a[0];
// p = 1;
//指针 1,表示指向下一格
// printf("*p = %d.n", *p ); // 555
printf("* p = %d.n", * p); // 444, 前置,指针先 1,然后取指针的值
// printf("(*p) = %d.n", (*p) ); // 555,先计算(*p),然后对(*p)整体 1
// printf(" (*p) = %d.n", (*p)); // 556,先*p取值,再前置 ,该值 1后作为整个表达式的值
for (int i = 0; i < 5; i ){
printf("*p = %d.n", *(p i));
}
}
结果:
代码语言:javascript复制* p = 444.
*p = 444.
*p = 333.
*p = 222.
*p = 111.
*p = 32766.
3、(*p)
代码语言:javascript复制先计算(*p),然后对(*p)整体 1
代码语言:javascript复制#include <stdio.h>
int main(void)
{
int a[5] = {555, 444, 333, 222, 111};
int *p;
p = a;
// p = &a[0];
// p = 1;
//指针 1,表示指向下一格
// printf("*p = %d.n", *p ); // 555
// printf("* p = %d.n", * p); // 444, 前置,指针先 1,然后取指针的值
printf("(*p) = %d.n", (*p) ); // 555,先计算(*p),然后对(*p)整体 1
// printf(" (*p) = %d.n", (*p)); // 556,先*p取值,再前置 ,该值 1后作为整个表达式的值
for (int i = 0; i < 5; i ){
printf("*p = %d.n", *(p i));
}
}
结果:
代码语言:javascript复制(*p) = 555.
*p = 556.
*p = 444.
*p = 333.
*p = 222.
*p = 111.
4、 (*p)
代码语言:javascript复制先*p取值,再前置 ,该值 1后作为整个表达式的值
代码语言:javascript复制#include <stdio.h>
int main(void)
{
int a[5] = {555, 444, 333, 222, 111};
int *p;
p = a;
// p = &a[0];
// p = 1;
//指针 1,表示指向下一格
// printf("*p = %d.n", *p ); // 555
// printf("* p = %d.n", * p); // 444, 前置,指针先 1,然后取指针的值
// printf("(*p) = %d.n", (*p) ); // 555,先计算(*p),然后对(*p)整体 1
printf(" (*p) = %d.n", (*p)); // 556,先*p取值,再前置 ,该值 1后作为整个表达式的值
for (int i = 0; i < 5; i ){
printf("*p = %d.n", *(p i));
}
}
结果:
代码语言:javascript复制 (*p) = 556.
*p = 556.
*p = 444.
*p = 333.
*p = 222.
*p = 111.