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"]呢?同上啦,和數組下標用法是相同的

  

  

  

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章