一、函數指針
函數指針的本質是一個指針,它可以指向某一個函數,從而使得我們可以通過調用指針來執行這個函數。首先,我們需要聲明一個函數指針,如下所示:
void (*funPtr)(int); //聲明一個函數指針,指向參數為int類型,返回值為void類型的函數
接著,我們需要將這個指針指向一個函數,方法如下:
void foo(int a) { std::cout << "a = " << a << std::endl; } int main() { void (*funPtr)(int); //聲明一個函數指針,指向參數為int類型,返回值為void類型的函數 funPtr = foo; //將函數指針指向foo函數 funPtr(10); //通過函數指針調用函數 return 0; }
輸出結果為:a = 10。
二、指針數組
指針數組是一個數組,其中每個元素都是指針類型,它們可以指向不同的數據類型,例如:
int a = 1; float b = 2.0; char c = 'a'; int* ptr1 = &a; float* ptr2 = &b; char* ptr3 = &c; void* ptrArr[] = {(void*)ptr1, (void*)ptr2, (void*)ptr3}; //聲明一個指針數組,其中每個元素都是void*類型
在上面的代碼中,我們聲明了一個指針數組ptrArr,其中包含3個元素,分別是指向int、float、char類型變數的指針。需要注意的是,由於元素類型不同,因此我們需要將每個指針都轉換為void*類型。
三、引用
引用是一種特殊的類型,它不是一個對象,而是一個別名。換句話說,引用可以理解為一個變數名的別名,它和被引用的變數共享同一個地址,因此對引用的修改會同時改變被引用的變數的值。例如:
int a = 10; int& r = a; //聲明一個引用r,它是a的別名 r = 20; //修改r的值,相當於修改a的值 std::cout << "a = " << a << std::endl; //輸出結果為:a = 20
需要注意的是,引用必須在定義的同時進行初始化,因為它是一個別名,沒有自己的地址。
四、位運算符
位運算符是針對二進位位進行操作的運算符,在C++中包括按位與&、按位或|、按位異或^、按位取反~、左移<<
和右移>>
6個運算符。它們的運算規則如下:
按位與(&):如果對應二進位位都為1,則結果為1,否則為0。
按位或(|):如果對應二進位位都為0,則結果為0,否則為1。
按位異或(^):如果對應二進位位不同,則結果為1,否則為0。
按位取反(~):將所有二進位位取反(0變成1,1變成0)。
左移(<>):將一個數的二進位碼向右移位,如果是正數,則在高位補0,如果是負數,則在高位補1。
下面是一個具體的例子:
int a = 5; //二進位表示為0101 int b = 3; //二進位表示為0011 int c1 = a & b; //按位與運算,結果為0001,即1 int c2 = a | b; //按位或運算,結果為0111,即7 int c3 = a ^ b; //按位異或運算,結果為0110,即6 int c4 = ~a; //按位取反運算,結果為1010,即-6 int c5 = a <> 1; //右移一位,結果為0010,即2
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198630.html