這個問題在這里已經有了答案: 在 C/C 中宣告指標變數的正確方法 [關閉] 5 個答案 在指標宣告中放置星號 13 個答案 2天前關閉。
這兩種方式有什么變化?
int *ptr 和 int* ptr
兩者的作業方式相同,但是對于我的代碼或性能,我的程式有區別嗎?
#include <iostream>
using namespace std;
int main() {
int a(5);
int *ptr1 = &a;
int* ptr2 = &a;
cout << "a: (0x" << hex << uppercase << (uintptr_t)&a << ") = " << dec << a << endl;
cout << "ptr1: (0x" << hex << uppercase << (uintptr_t)ptr1 << ") = " << dec << *ptr1 << endl;
cout << "ptr2: (0x" << hex << uppercase << (uintptr_t)ptr2 << ") = " << dec << *ptr2 << endl;
return 0;
}
輸出:
a: (0x61FE0C) = 5
ptr1: (0x61FE0C) = 5
ptr2: (0x61FE0C) = 5
uj5u.com熱心網友回復:
絕對沒有。空白被忽略。
在哪里對齊是樣式的決定,基于團隊約定和規則(如果有)或個人喜好,主要是為了提高代碼的可讀性。它不會改變代碼的編譯方式。
uj5u.com熱心網友回復:
它們是一樣的:
int a {5};
int *ptr1 = &a; // same as below
int* ptr2 = &a;
不僅用于指標,還用于參考:
int a {5};
int& b = a;
int &c = b; // same as above
int & d = a; // same
uj5u.com熱心網友回復:
這兩個宣告具有相同的含義。你甚至可以考慮另外兩個宣告
int *ptr1 = &a;
int* ptr2 = &a;
int * ptr3 = &a;
int*ptr4 = &a;
或者
int*ptr4=&a;
編譯器可以毫無歧義地正確決議這些記錄。該符號*既不是識別符號的一部分,也不是關鍵字的一部分。
這兩種申報記錄的區別
int *ptr1 = &a;
int* ptr2 = &a;
在于宣告符和型別說明符之間的語意。
例如你可以寫
int ( *ptr ) = &a;
但你可能不會寫
( int * ) ptr = &a;
或者你可以寫
int typedef *ptr;
但你可能不會寫
int * typedef ptr;
所以最好寫
int *ptr1 = &a;
代替
int* ptr2 = &a;
例如這個宣告
int* ptrq, ptr2;
沒有宣告兩個指標。相反,你需要寫
int *ptr1, *ptr2;
或者,如果您有一個指向陣列的指標,例如
int a[10];
那么你甚至不能使用這個組合int*。你必須寫
int ( *ptr )[10] = &a;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419682.html
標籤:
上一篇:從未排序的鏈表中洗掉重復項時出錯
下一篇:遍歷指標陣列C
