C語言踩過的關於指標的坑!!!

2021-08-21 19:16:57 字數 1127 閱讀 9725

指標是c語言的一大特色,也是一大難點。下面就分享下我在學習c語言的路上踩過的坑,警示自己,也警示後來人。

先上**

#include #include typedef struct hstring;

void strassign(hstring *s, char *chars) else

s->length = len;

}}void printstr(hstring *s)

}int main()

這是嚴版《資料結構》上採用堆分配儲存儲存字串,並將字串chars中的內容複製到s中。執行**時,報錯如下:

後經過debug,發現含有s->ch以及s->length的表示式都會出錯。經過思考,我認為錯誤原因如下:在main函式中我只宣告了指向hstring的指標s,但沒有為s分配儲存空間,導致s指向不明。因此,將main函式修改如下:

int main()
int main()
其等同於

int main()
第2點就是,要注意指標和指向指標的指標之間的區別。以下面的**為例:

void concat(hstring *s, hstring s1, hstring s2)

int main()

在上面這段**中,是不能夠將ps, pt指向的內容鏈結起來並賦值給pc的。因為c語言函式之間傳參是值傳遞,位址值也是值。當呼叫concat()函式時,形參s得到的是pc位址值的副本,然後malloc()函式申請並用s指向了新的記憶體空間,而原來的pc的位址值並沒有發生任何變化。因此,此時應該傳遞的是指向pc的指標,即指向指標的指標(pc本身也是指標)。修改後的**如下:

void concat(hstring **s, hstring s1, hstring s2)

int main()

因此,在呼叫函式的時候,如果想要改變指標指向的變數的值,應該傳遞指標。而想要改變指標變數的值,則應該傳遞指向指標的指

關於javascript踩過的坑

前言 最近做專案寫js時遇到乙個坑,獲取json物件的值時,發現json物件中的key存在 的情況,例如如下 中的 task.taskid var obj activityname eee historicprocessinstance.id id daa84b785d714930b4bf24a47...

git踩過的坑

4.git 修改當前的project的使用者名稱的命令為 git config user.name 你的目標使用者名稱 git 修改當前的project提交郵箱的命令為 git config user.email 你的目標郵箱名 如果你要修改當前全域性的使用者名稱和郵箱時,需要在上面的兩條命令中新增...

springboot踩過的坑

設定上下文路徑context path不生效 springboot 2.0之前的語法 server.context path xx 2.0之後的語法 server.servlet.context path xx 在配置yml時,報錯如下 caused by org.yaml.snakeyaml.sc...