日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++ grammar】常量、指针、Usage of using, typedef, and #define

發布時間:2023/12/1 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ grammar】常量、指针、Usage of using, typedef, and #define 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1、常量 (Constant)
  • 2、指針(Pointer)
  • 3、Usage of using, typedef, and #define

1、常量 (Constant)

常量是程序中一塊數據,這個數據一旦聲明后就不能被修改了。

如果這塊數據有一個名字,這個名字叫做命名常量;比如 const int A = 42; 其中A就是命名常量;
如果這塊數據(這個常量)從字面上看就能知道它的值,那它叫做“字面常量”,比如上面例子中的“42”就是字面常量

//const datatype CONSTANTNAME = VALUE; const double PI = 3.14159; const int SIZE = 3; int const X = 5; const char C = 'k'; const char* STR = "Hello"; //字符串常量Hello放在常量區,而且是一個指針類型,所以必須加上const

如果我們對PI進行賦值操作,會報錯:表達式必須是可以修改的左值。
關于這個問題詳細的講解見:
1、https://blog.csdn.net/qq_42604176/article/details/108909002
2、https://blog.csdn.net/JQ_AK47/article/details/53169799

2、指針(Pointer)

指針有兩個屬性:
1、指針變量本身
2、指針變量指向的數據

int y = 10; const int x=5; const int* p =&x; p = &y; //不會報錯 *(p) = y; //報錯

解釋:由于x是個常量,所以它的值不可以被改變,也就是說地址不能修改,也就是說p存的地址是個常量,所以要加const。p可以指向其他變量

int x=5; int* const p =&x;

解釋:p指針是個常量,它不能指向其他變量了。但是它指向的數據x是可以改變值的。

const int x=5; const int* const p =&x;

解釋:x是個常量,p也是個常量,不能指向其他變量了

指針是一個地址,它長得像 0x8FFF 這個樣子。地址呢,就是某個內存位置的一個編號。那這個位置的內存是可以存放一些數據的。這些數據就叫做“指針所指的數據”或者“指針指向的數據”。
一些概念:

我們把指針放到一個變量里面,就是指針變量
我們把指針放到常量中,就是指針常量

那如果一個指針(也就是地址,比如0x8FFF)所指的數據(也就是0x8FFF這個內存位置存放的數據)是常量,這個指針被稱為常量指針
所以,有一種東西,叫做“常量指針常量”。就是說,一個常量中存著一個指針,這個指針又指向另外一個常量。

Pointer to Constant (常量指針/常指針)
特征:指針所指向的內容不可以通過指針的間接引用(*p)來改變。

const int x = 1; const int* p1; p1 = &x; //指針p1類型是const int* *p1 = 10; //Error:表達式必須是可以修改的左值。

Pointer Constant (指針常量)
指針常量”的含義是:指針本身的內容是個常量,不可以改變

int x = 1, y = 1; int* const p2 = &x; //常量p2的類型是(int *) *p2 = 10; //okay->x=10 p2 = &y; //Error:p2是一個常量:表達式必須是可以修改的左值。

小結
從左往右看,先看到 * 即為常量指針,先看到const 即為指針常量。
const int * x
int * const y

問題:請你嘗試解釋下面代碼中的 pp 是個什么東西?

int x = 0, * const px = &x; const int* const &pp = px;

引用。px的別名,px是指針常量,pp是常指針常量

3、Usage of using, typedef, and #define

1、#define是預處理指示符,用來定義宏,編譯器不做檢查
2、typedef 創建能在任何位置
C++11中為 using 關鍵字賦予了一個類型聲明的新功能

using ConstPointer = const unsigned long int *; ConstPointer p;ConstPointer q;ConstPointer r; using UInt = unsigned int; UInt x = 42u; //表明這是一個指向函數的指針,它是一個類型 using FuncType = void(*) (int,int); void example(int,int) {} //f是變量 FuncType f = example; //這里的using替代typedef =>等同于typedef void (*FuncType) (int,int);

這里的using是為了解決類型別名的問題。
之前我們遇到過這樣的語句:

using std::cin;

表明將std空間的cin標識符引入到當前的程序里面來。cin是一個對象而不是一個類型。
所以如果我們這么寫:

using in = std::cin;

編譯器會報錯。
using與typedef的區別
typedef是把類型放在前面,而簡寫的別名放在后面
如:typedef 類型 簡寫的別名;
using用法:
using 簡寫的類型別名 = 類型;
這樣類似于賦值的語法很直觀。
using的寫法比typedef的寫法更加直觀,所以,我們應盡量使用using聲明新類型名。而且當涉及到模版類型名時,只能使用using。
編碼規范:
Names representing types must be in mixed case starting with upper case.
代表類型的名字必須首字母大寫并且其它字母大小寫混合

總結

以上是生活随笔為你收集整理的【C++ grammar】常量、指针、Usage of using, typedef, and #define的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。