C語言裡 和 的區別

2021-09-29 17:50:48 字數 981 閱讀 1230

今天寫**時,遇到乙個很明顯,但是困住我這個小白的錯誤:

.

..錯誤:在非結構或聯合中請求成員『data』

switch_core_file_write

(rh->fh, mask ? null_data : rnnoise_clone.data,

&len)

很明顯是rnnoise_clone.data用錯了。為什麼呢?

..並不是乙個運算子,它只是乙個斷點符號,它指向的是結構體或者物件。

好吧,看完定義並沒有看明白。下面我們來翻譯一下:

->是通過乙個結構體或物件指標來訪問他們的內部成員變數;

.是直接通過結構體或物件來訪問他們的內部成員變數。

在網上找到乙個很便於記憶的方式:

a->b讀作a指向結構體的b

a.b讀作a的b

那麼區別就顯而易見了,->前面肯定是結構體指標或物件指標;.前面的是乙個結構體或物件。

下面我們通過**直觀的了解一下:

switch_frame_t frame =

;switch_frame_t *rnnoise_clone;

frame.data = data;

//ok,因為frame是乙個switch_frame_t的結構體

rnnoise_clone->data = data;

//ok,因為rnnoise_clone是乙個switch_frame_t型別的結構體指標

其實兩者的作用是一樣的,那麼為什麼會重複製造輪子呢?

早期的c語言不支援將結構體作為引數在函式之間傳遞,只能用指向結構的指標在函式間進行傳遞。

emmm

C語言裡棧和堆的區別整理

這裡說的是c語言程式記憶體分配中的堆和棧。下面先談談c語言的記憶體管理 可執行程式在儲存時 沒有調到記憶體 分為 區 text 資料區 data 和未初始化資料區 bss 3個部分。1 區 text segment 存放cpu執行的機器指令 machine instructions 通常,區是可共享...

C語言裡棧和堆的區別整理

這裡說的是c語言程式記憶體分配中的堆和棧。下面先談談c語言的記憶體管理 可執行程式在儲存時 沒有調到記憶體 分為 區 text 資料區 data 和未初始化資料區 bss 3個部分。1 區 text segment 存放cpu執行的機器指令 machine instructions 通常,區是可共享...

C和C 語言的區別

c和c 語言的區別 這是我複習c和c 語言時做的幾點總結,不妥之處,敬請大神指正。1 c是面向結構化的設計語言,c 在c基礎上增加了物件導向的支援和物件導向的程式設計方法,支援封裝 繼承 多型。c 可定義類,c中沒有類的概念。2 c的結構僅可包含資料成員,c 擴充套件了結構,可以包含函式成員,也可以...