最近刚复习完指针,刚好朋友问了我这几个表达式的含义*p++ *(p++) (*p)++ *++p *(++p) ++*p ++(*p) 就写了这段代码帮助理解 求指正!
// zhizhen.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int main(int argc, char* argv[])
{
int test1,test2,test3,*p,i;
//*p++与*(p++)
//++比*优先级高所以*p++可以看成*(p++) 就是一样的啊 测试一下就是这样的
i=176;
p=&i;
test1=*p++; //执行结束后 指针p增1 指向的已不是变量i 大概是i地址的下一个地址 打印text2显示了这个地址的值 所以下面要再重新给指针p赋值来测试
test2=*p;
printf("%d程序缘%d\n",test1,test2);
p=&i;
test3=*(p++);
printf("%d\n",test3);//由此得出 *p++ 和 *(p++) 是一样的 先将*p赋给test变量 然后p自增1
//(*p)++
i=176;
p=&i;
test1=(*p)++;
test2=*p;
printf("%d程序缘%d\n",test1,test2);//由此得出 (*p)++是先将*p赋给test变量 然后*p(即i)自增1
//*++p与*(++p)由优先级也可得出他们两个也是相等的 测试一下
i=176;
p=&i;
test1=*++p;
p=&i;
test2=*(++p);
printf("%d程序缘%d\n",test1,test2);//由此得出 两个表达式都是是先自增p 指向下了下一个地址 然后取其值赋给test
//++*p ++(*p) 他们两个也是相等的 测试一下
i=176;
p=&i;
test1=++*p;
i=176;
p=&i;
test2=++(*p);
printf("%d程序缘%d\n",test1,test2);//由此得出 两个表达式都是是先自增*p(即i) 再把*p赋给test
return 0;
}