C 使用指標訪問成員變數

發布 科技 2024-08-20
14個回答
  1. 匿名使用者2024-02-01

    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 您還可以在申請記憶體空間時直接設定要放入記憶體的內容。

    語法:指標變數 = 新資料型別(初始值);

  2. 匿名使用者2024-01-31

    類其實和結構體類似,都是重新定製的資料型別,其中第三行的類ab{}是class{}; 其實是和int一樣定義的新資料型別,但是int是C++預定義的,new必須根據後續的資料型別來分配空間的大小,呵呵,如果換成別的東西,因為沒有這個資料型別就沒有辦法分配空間, 所以這是不對的。

  3. 匿名使用者2024-01-30

    你的 *o 指向的是 ab 類,當然是新的 ab,當然把它改成別的東西是錯誤的。

  4. 匿名使用者2024-01-29

    AB 這裡是型別。 等價於 int *o=new int。

  5. 匿名使用者2024-01-28

    這不就是演員的問題嗎? 。

  6. 匿名使用者2024-01-27

    第一種寫法:

    a).p=&b;

    高於 *,並且 (指標) 兩側的括號不能丟失。 如果去掉括號並寫上*,那麼它就等價於*(,所以意思是完全錯誤的。

    第二種寫法:

    a->p=&b;

    是乙個新的運算子,通常稱為“arrow”,可以使用它直接通過結構指標獲取結構成員; 這也是 -> 在 C 語言中的唯一用途。

    struct 是一種資料型別,是用於建立變數的模板,編譯器不會為其分配記憶體空間,就像 int、float、char 等關鍵字本身不會占用記憶體一樣; 結構變數包含真實資料,需要記憶體來儲存它們。 以下是乙個錯誤,不能取結構名稱的位址,也不能分配給其他變數。

  7. 匿名使用者2024-01-26

    首先,我們必須知道兩個最基本的知識點:

    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*,所以這是錯誤的。

    只有第乙個是正確的,後兩個是錯誤的。

  8. 匿名使用者2024-01-25

    int *p;指示宣告 int 位址的變數,稱為 p

    a,直接解釋的是乙個int變數的值。 是位址中的數值。

    所以我選擇 p=&a;

  9. 匿名使用者2024-01-24

    struct 指標成員指向乙個變數,這有點難以理解。

    從字面上看,斷句有幾種可能性:

    首先定義乙個包含所有可能方案的結構:

    struct test

    struct test t1, *t2;1. 結構指標成員指向的變數。

    結構中有乙個指標成員,然後您要訪問該結構成員指向的變數值。

    然後你可以 *(這種方式取 p 的值。

    struct 指標成員指向變數。

    有兩種方法可以訪問這種情況:

    t2->p)

    或 *(*t2)。p)

    效果是一樣的。

    描述不正確,但它是:

    struct 指標指向成員變數。

    同樣,可以使用兩種方法:

    t2->p

    或 *(*t2)。p

  10. 匿名使用者2024-01-23

    1.既然是指標變數,那就把乙個變數的位址值賦給指標變數吧!

    2.具體來說,給指標賦值位址值有兩種方式:一種是用位址字元&操作嵌入變數,另一種是利用malloc函式動態開啟記憶體,給指標變數賦值記憶體位址值。

    3. 例如,定義 int 指標變數 int

    p;和 int 型別變數

  11. 匿名使用者2024-01-22

    由於 int 是值型別,因此不能直接分配給 p(p 是 int 指標型別)。 因此,將支架放在二樓是正確的。 通過獲取 p 的位址並將其轉換為相應的指標,然後將 b 直接分配給它。 另一種方法:a->p=&b;

    將 b 的位址分配給 a 中 p 的指標。

  12. 匿名使用者2024-01-21

    你的理解太有問題了,所以我看不懂以下內容。

    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 的值多麼混亂,它們都會從大到小輸出。

  13. 匿名使用者2024-01-20

    #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),乙個指標函式,包括賦值,不是沒用嗎?

    麻煩大家了,謝謝你們的幫忙,我會因為你們的好意多加分。。謝謝,謝謝。

  14. 匿名使用者2024-01-19

    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) 在這裡有乙個額外的分號}

相關回答
24個回答2024-08-20

指標是一維的,陣列是二維的。

所以 *p 可以表示 a[0][0] 的值,但 **p 找不到相應的語法等價物。 換句話說,你不能那樣做。 為此,您需要宣告乙個二維陣列。 >>>More

10個回答2024-08-20

class test

protected: >>>More

10個回答2024-08-20

在 Windows 平台上 +VC 指標是 4 個位元組,我不知道你在用什麼。 >>>More

14個回答2024-08-20

它是將 DAT 的值儲存在加法器位址上,注意它是乙個 16 位無符號數字。 >>>More

4個回答2024-08-20

printf("%d",&i);它應該改為 printf("%d",i);

這是變數 i 的位址。 刪除位址字元是 i 的值。 >>>More