例如:


代碼寫的不錯,就是需要用malloc為這個結構體創建內存空間。

p=malloc(sizeof(date));

然後就都對了 p是指針 *p就是內存實體了!


你這寫的什麼呀……完全不知道你要表達什麼。定義了一個結構體類型後,下面沒有結構體的實例,就要操作結構體指針裏的成員是什麼意思?你要測試非法地址訪問嗎?


指針指向什麼東西是與指針無關的, 如果指針指向的數據可以直接進行某種操作, 那麼當然可以把指針解引用後進行這種操作, 也就是說題主這麼做是完全可以的.

另外, 指針, 類型這些概念只是對數據的一種解釋罷了, 指針本質上只是一個整數, 我們甚至可以搞這樣的騷操作(64位的環境下):

int target = 0;
long long ptr = target; // 注意這裡不是int*或者long long *
printf("%d
", *(int*)ptr); // 把ptr解釋成一個指向int的指針

之所以說指針相加沒有意義, 是因為對地址的操作邏輯上只有這幾種, 容不下加法的位置:

  • 取得相對一個地址有一定偏移的一個新地址(指針 [公式] 整數)
  • 取得兩個地址之間的相對偏移(指針-指針)
  • 取得一個地址指向的內容

以下是對C(和題主)的吐槽:

  • C有個運算符叫-&>, 比如p-&>a就是(*p).a, 就是用來當這種非常常見的操作的語法糖的
  • 但是這個運算符顯得有些多餘, 因為pascal的指針語法是這樣的: p^表示解引用, p^.a就是C的p-&>a 了, 雖然^被C用了, 但鍵盤上還有@$c/c++直到現在還沒碰...


不能計算,因為指針是保存的地址,沒有實例,所以即便計算地址,也無從考證


用指針要用new, date* p = new date();

不然你哪個p指哪裡去了???

用指針,可以用這個操作符-&>

p-&>stock = p-&>sales + p-&>last;

記得用完delete p;

指針相加、相減是有意義的,相乘和相除是沒有意義的。

你這都是在哪學的,看這嚇人!!

看下我自己理解寫的:

C/C++語言 - 梁筆記?

zouzhongliang.com


你定義了一個結構體,它可以理解為是一個類型(實際上就是類型),有了類型之後還需要用這個類型定義一個變數,例如int a;這種,結構體也是一樣。


推薦閱讀:
相關文章