-
1. 新品
new 是 C++ 的關鍵字。 它被視為運算子,如 +、. 此操作的結果是應用指定資料型別大小的記憶體段。
語法: Pointer variable = new data type;
新將做三件事:
1.主動計算指定資料型別所需的記憶體空間量;
2.返回正確的指標型別;
3. 在第一次記憶體分配中,分配的記憶體將按照語法規則進行初始化。
這是什麼意思? 請看以下示例:
int* p;
p = new int;
與過去不同的是,p 不再是“籬笆下”,不是對現有變數,而是對 new 分配的新記憶體空間。
p 指向由 new 分配的新記憶體“ 這句話相當於:”new 分配了一段新的記憶體空間,然後將該記憶體空間的位址儲存在變數 p 中。 因此,最後,p 仍然儲存變數的位址,只不過它是乙個“未命名”的變數。
指向現有變數和指向新分配的記憶體空間有什麼區別?
“原始變數”可以比作指向與主同在的原始房間。 “新分配的記憶體空間”就像乙個“臨時建築”。 當我們不需要它時,我們必須主動拆除它。 拆除工作由 Delete 完成。
當使用new獲取指標變數並獲取記憶體位址時,我們可以如前所述,通過指標和*號對記憶體位址(匿名變數)進行操作。
例如:int* p = new int;
p = 100;
cout 螢幕將輸出 100。
2. 新建時初始化。
new 您還可以在申請記憶體空間時直接設定要放入記憶體的內容。
語法:指標變數 = 新資料型別(初始值);
-
類其實和結構體類似,都是重新定製的資料型別,其中第三行的類ab{}是class{}; 其實是和int一樣定義的新資料型別,但是int是C++預定義的,new必須根據後續的資料型別來分配空間的大小,呵呵,如果換成別的東西,因為沒有這個資料型別就沒有辦法分配空間, 所以這是不對的。
-
你的 *o 指向的是 ab 類,當然是新的 ab,當然把它改成別的東西是錯誤的。
-
AB 這裡是型別。 等價於 int *o=new int。
-
這不就是演員的問題嗎? 。
-
第一種寫法:
a).p=&b;
高於 *,並且 (指標) 兩側的括號不能丟失。 如果去掉括號並寫上*,那麼它就等價於*(,所以意思是完全錯誤的。
第二種寫法:
a->p=&b;
是乙個新的運算子,通常稱為“arrow”,可以使用它直接通過結構指標獲取結構成員; 這也是 -> 在 C 語言中的唯一用途。
struct 是一種資料型別,是用於建立變數的模板,編譯器不會為其分配記憶體空間,就像 int、float、char 等關鍵字本身不會占用記憶體一樣; 結構變數包含真實資料,需要記憶體來儲存它們。 以下是乙個錯誤,不能取結構名稱的位址,也不能分配給其他變數。
-
首先,我們必須知道兩個最基本的知識點:
1. &a 指向 a 的位址。
2.指標指向位址,不等於整數變數的值,即int *不等於int,不能從int轉換為int *。
知道了以上兩個最基本的知識點,你的問題很簡單。
第乙個:int *p;
p=&a;沒錯。 定義指標變數 p,然後才將 p 指向變數 a 的位址。
第二:int *p;
p=int* (a);
p 是指向位址的指標,而不是 int 值,因此是錯誤的。
第三:int *p=a;
無法從 int 轉換為 int*,所以這是錯誤的。
只有第乙個是正確的,後兩個是錯誤的。
-
int *p;指示宣告 int 位址的變數,稱為 p
a,直接解釋的是乙個int變數的值。 是位址中的數值。
所以我選擇 p=&a;
-
struct 指標成員指向乙個變數,這有點難以理解。
從字面上看,斷句有幾種可能性:
首先定義乙個包含所有可能方案的結構:
struct test
struct test t1, *t2;1. 結構指標成員指向的變數。
結構中有乙個指標成員,然後您要訪問該結構成員指向的變數值。
然後你可以 *(這種方式取 p 的值。
struct 指標成員指向變數。
有兩種方法可以訪問這種情況:
t2->p)
或 *(*t2)。p)
效果是一樣的。
描述不正確,但它是:
struct 指標指向成員變數。
同樣,可以使用兩種方法:
t2->p
或 *(*t2)。p
-
1.既然是指標變數,那就把乙個變數的位址值賦給指標變數吧!
2.具體來說,給指標賦值位址值有兩種方式:一種是用位址字元&操作嵌入變數,另一種是利用malloc函式動態開啟記憶體,給指標變數賦值記憶體位址值。
3. 例如,定義 int 指標變數 int
p;和 int 型別變數
-
由於 int 是值型別,因此不能直接分配給 p(p 是 int 指標型別)。 因此,將支架放在二樓是正確的。 通過獲取 p 的位址並將其轉換為相應的指標,然後將 b 直接分配給它。 另一種方法:a->p=&b;
將 b 的位址分配給 a 中 p 的指標。
-
你的理解太有問題了,所以我看不懂以下內容。
1.我在這裡的理解是建立了乙個名為 pf 的指標函式,指標函式中的值是乙個整數型別——即乙個名為 pf 的指標,這個 pf 指標指向乙個具有 3 個 int 形式引數的函式,並且這個函式不返回值。
2.因為 pf=sort,對應的函式值也對應 a=x, b=y, c=z - 錯誤,這就是函式定義。 定義了乙個名為 sort 的函式,該函式有 3 個 int 型別形式引數,它們不對應任何人,而是自己需要的; 該函式不返回值。
3.將函式的輸入值作為 a、b、c - 這句話的理解方式類似。 它使 x=a、y=b、z=c。
4.這裡我想問一下,x y的位置可以反轉嗎? temp 和 x 呢 - 它們不能互換! 您想弄清楚誰將值分配給誰:將等號右側的值分配給左側的變數。
5.這是 x y z 中數字位址的反轉 - 它們不會交換位址,只是交換值。 例如,x=5 和 y=1 已替換為 x=1 和 y=5。
6.pf(a,b,c),乙個包含賦值的指標函式,是不是沒用——錯了。 這不是乙個賦值,而是乙個指標,用於呼叫具有實際引數 a、b 和 c 的排序函式,即在排序函式中使形式引數 x=a、y=b、z=c 並執行排序函式。
7.函式排序中 x y z 的值可以用來實現上述操作——排序嗎? 無論輸入 a、b 和 c 的值多麼混亂,它們都會從大到小輸出。
-
#include
#include
using namespace std;
void sort(int,int,int);
int main()
viod sort (int x,int y,int z);因為 pf=sort,所以對應的函式值也對應 a=x,b=y,c=z?
我真的不明白公式的後半部分。 是不是把x、y、z中數字的位址交換,改變數字的位置,達到排序的目的?
這不是交換位址,只是交換變數的值。
與其參考函式呼叫,不如只取函式排序中 x y z 的值來做上述操作嗎?
而pf(a,b,c),乙個指標函式,包括賦值,不是沒用嗎?
麻煩大家了,謝謝你們的幫忙,我會因為你們的好意多加分。。謝謝,謝謝。
-
void(*pf)(int,int,int) 定義了乙個名為 pf! 注意它是乙個函式指標,請檢查指標函式的含義。
pf=sort ;指標指向排序函式,排序函式可以被 pf 指標引用(其實排序函式的位址值是分配給 pf 的,如果這個不理解,說明對指標的理解不夠清楚)。
pf(a,b,c) ;sort 函式通過 pf 呼叫,等價於 sort(a,b,c);
viod sort (int x,int y,int z) 在這裡有乙個額外的分號}
指標是一維的,陣列是二維的。
所以 *p 可以表示 a[0][0] 的值,但 **p 找不到相應的語法等價物。 換句話說,你不能那樣做。 為此,您需要宣告乙個二維陣列。 >>>More
它是將 DAT 的值儲存在加法器位址上,注意它是乙個 16 位無符號數字。 >>>More
printf("%d",&i);它應該改為 printf("%d",i);
這是變數 i 的位址。 刪除位址字元是 i 的值。 >>>More