新手有关问题n则

新手问题n则
1.cout < <char(*ptr+ 'A '- 'a ')   这是什么意思(其中ptr指向一字符串数组)
2.*P++是不是先++再*       因为++是右结合?
3.当程序执行中   数组元素的下标超出所定义范围时   系统将给出 "下标越界 "的出错信息
      这句话为什么不对?
4.引用可以指向不同的变量   只要类型一致就可以
    这句话为什么错?
5.   char   s[]= "9876 ",*p;
for   (p=s;p <s+2;p++)
        std::cout < <p < < "   ";
输出结果是什么?为什么?

------解决方案--------------------
1. 'A ' == 0x41, 'a ' == 0x61
故cout < < char(*ptr + 'A ' - 'a ') ==>
char ch = *ptr - 32;
cout < < ch;
如果ptr指向的是一个大写字母的字符串数组,那么输出的就是小写字母

2. 后缀运算符的优先级比前缀运算符要高,故*p++ ==> *(p++)

3. C语言不进行边界检查,故不能判断数组下标是否越界,所以程序员的自己检查下标是否越界

4. 引用是变量的别名,一旦和某个变量绑定后便不能更改,和指针不同

5. 输出9876 876,因为输出的是字符串