【C语言进阶深度学习记录】八 C语言中void的分析
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】八 C语言中void的分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 void的意義
- 1.1 不存在void變量
- 1.2 C標準
- 1.3 void指針的意義
- 1.4 通過void* 實現memset函數
- 2 總結
1 void的意義
void修飾函數的參數和返回值的時候:
- 如果函數沒有返回值應該將其返回值聲明為void
- 如果函數沒有參數,應該將函數的參數聲明為void
- 如果沒有參數,并且不聲明為void,則函數參數默認是任意的,比如main函數
- 如果函數沒有返回值,但是不聲明為void,則函數默認返回值是int
如下圖中的函數f(),它的返回值沒有聲明為void,默認是int,參數可以是任意多個。
注意:
- void的是為了表示函數參數和返回值為無。
- 從以上內容,也可以知道,C語言不是一門強類型語言。因為返回值不聲明,就默認可以是int
1.1 不存在void變量
在之前的文章中,我們學過了C語言中的變量的意義:【C語言進階深度學習記錄】一 數據類型的本質與變量的本質 ,知道變量的意義在于一段固定大小內存的別名。但是void無法表示這么一段固定大小的內存,沒有void的標尺,無法在內存中裁剪出void對應的變量,所以void無法聲明變量。
比如下圖的代碼中,標出error的兩行代碼:
- 但是void* pv這一行沒有標識錯誤。說明這樣是可以的。后序會說明void指針的作用。
1.2 C標準
現在我們先要知道兩個C標準
- ANSI C標準:標準C語言的規范
- 擴展C標準:不同的廠商在ANSI C標準上進行了擴充。
比如下面的代碼,在ANSI C標準中是會出錯的,但是在GNU的C標準中的gcc編譯器是可以的,且sizeof(void)的大小是1 :
1.3 void指針的意義
void指針在C語言中具有很大的作用,首先我們需要知道:
- C語言規定,只有相同類型的指針才可以相互賦值
- void* 指針作為左值時,可以接收任意類型的指針
- void* 指針作為右值時,需要對它進行強制類型轉換
1.4 通過void* 實現memset函數
- 代碼:MemSet.c
- 編譯運行結果為:
2 總結
- void是一種抽象的數據類型
- void類型不能用于定義變量
- void類型一般可以用于聲明無參函數
- void類型也可以用于聲明函數無返回值
- 可以定義void* 類型的指針
- void* 指針可以接收任意類型的指針值
總結
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】八 C语言中void的分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLyog安装使用教程
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习