今天寫**時,遇到乙個很明顯,但是困住我這個小白的錯誤:
.
..錯誤:在非結構或聯合中請求成員『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 擴充套件了結構,可以包含函式成員,也可以...