C++运算符理解

关于符号 有两点
     首先 编译器的贪吃法规则,既尽量用更长的标志符
    
     例如 a+++++b 会被理解成 a++ ++ +b 也就是((a++)++) + b,由于赋值表达式的左值一定是变量,所以会出错 a++ 是一个赋值表达式,(a++)++的左值是a++出错
   
     第二 对于*P++的理解  *p++和 *(p++)是完全一样的
  
举个易错的例子
     #include"iostream.h"
     void main()
     {
          int a[]={1,3,5,7};
          int *p;
          p=a;
          cout<<*p++<<endl;  /*1  在这里输出*P为a[0]=1,并且将p指向下一个位置*/
          p=a;
          cout<<(*p)++<<endl; /*2  在这里输出*P为a[0]=1,并且将*p也就是a[0]作自增,a[0]=2*/
          p=a;
          cout<<*(p++)<<endl; /*3 同1,输出的a[0],这个时候a[0]=2了*/
     } 

所以上题的结果是1,1,2


      从这里也能看出靠指针运算可以操作被指向的数,因为这里p就是a[0]的实际地址,p指向的值加1,则也就是a[0]加1,*p就是操作的a[0]

最重要的2点

1,任何一个逻辑运算符的优先级低于任何一个关系运算符。
2,移位运算符的优先级比算术运算符要低,但是要比关系运算符要高。


下面的例子除了*P++还用到了空指针 也就是指向NULL的指针 指针的值是0

#include <iostream>
#include <string>
using namespace std;

void print_char(char* array[]);//函数原形声明

void main(void)
{
char* test[]={"agfc","cde","fgh",NULL};//这里添加一个NULL,表示不指向任何地址,值为0
print_char(test);
cin.get();
}

void print_char(char* array[])
{
while(*array!=NULL)
{
cout<<*(array++)<<endl;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值