C/C++查漏补缺(常更)

一、#define宏定义

  如下程序段,则输出结果为:

  #define MAX 12

  int main(){

    cout << "20\0MAX019" << endl;

  }

  输出结果:20 , 知识点:#define定义 的宏常量不替换程序中""里的东西

  https://www.cnblogs.com/bytebee/p/8205450.html

二、const常量指针与指针常量

  定义一个int常量

  const int a = 10;

  int const a = 10;

  这两种方法都是合法的,意义相同。当const用于指针呢?

  int * const p = &a; // 指针常量 p = NULL; 非法

  int const *p = &a; // 常量指针 *p = 20; 非法

  const int *p = &a; // 常量指针

  若想定义一个指针,既不能改变其值,也不能改变其指向的值,

  const int * const p = &a; 

  下面这个语句看着有点怪怪的

  int const * const p = &a;

  其实它实现了和上一条定义相同的效果

三、printf()函数

  如下输出语句是否正确

  char *s = "parliament";

  printf(s); // ok, 输出 parliament

  printf(s+1); // ok, 输出arliament

  printf("c++"+1); // ok,输出++ 

  (对于输出结果不明白的参见第四条)

  初学c时,接触的用printf()输出字符串的方式就是printf("%s", 字符串);第一次看到上面的输出语句觉得是语法错误,直到前天(2019.11.18)看到87年一道键盘字母对应的题目题解后才返回来又看了一下,没想到是正确的。

  该题链接

  https://www.cnblogs.com/songlee/p/5738125.html

四、字符串常量

  在之前的文章里提到过字符串常量代表的其实是一个地址,是字符串首元素的地址,今天再把它细说一下

  比如字符串常量"string",看着是一个字符串,其实本质是一个const char*的地址,是一个地址常量

  "string"+1则代表将该地址移动 1*char个字节数,即移动到第二个元素't'的地址,此时输出结果为 "tring"

  "string"[1]呢?相当于*("string"+1),取第二个元素的值,即't'

  1["string"]呢?同上啦,和数组下标用法是相同的

  

  

  

   

posted @ 2019-11-20 09:29  _程序兔  阅读(170)  评论(0编辑  收藏  举报