日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言再学习 -- 关键字void

發布時間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言再学习 -- 关键字void 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參看:C語言關鍵字

void 用途:

1、對函數返回的限定,用于強調函數沒有返回值。如,void func(int x);
2、對函數參數的限定,用于強調函數沒有任何參數。如,int func(void);
3、指向void的指針。如 void *vp = NULL;
4、丟掉函數調用的返回值。如, int func(int x); ?(void)func(5);
5、(void)0,(void)1,(void *)0,(void*)0x100000

1、void

void對象的(不存在的)值不能夠以任何方式使用,也不能被顯式或隱式地轉換為任一非空類型。因為void表達式表示一個不存在的值,這樣的表達式只可以用在不需要值的地方,例如:作為一個表達式語句或作為逗號運算符的左操作數。(《C程序設計語言》 附錄A.6.7)


1)不能被顯式或隱式地轉為任一非空類型
int x = 12, y = 0; y= (int)((void)x); // 錯誤:'type cast' : cannot convert from 'void' to 'int' y= (int)((void)123);//錯誤: 'type cast' : cannot convert from 'void' to 'int'
2)void 表達式只能用在不需要的地方
int x = 12, y = 0; (void)x;//正確:表達式語句 y = ((void)x, 123);//正確:逗號運算符的左操作數
3)定義void變量
void a;//是錯誤的,因為定義變量時必須分配內存空間,定義void類型變量,編譯器不知該分配多大的內存空間。
4)將表達式強制轉換為void類型
define min(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x < _y ? _x : _y; })
(void)(&_x == &_y);其中&_x == &_y是關系表達式,如果關系為真,則表達式的結果值為數值1;如果為假,則結果值為數值0。故而,(void)(&_x == &_y);等價于(void)0;或(void)1;
int func(int x); void func(5);
(void)func(5);在表達式語句中一個空的強制類型轉換將丟掉函數調用的返回值。

5)(void)0
標準庫頭文件:assert.h #define assert(test) ((test) ? (void)0 : _Assert(__FILE__“:”__STR(__LINE__)”” #test))
(void)0的作用相當于函數返回類型為void限定,它僅是一個占位符表達式,什么都不做。

2、指向void的指針
指向任何類型的指針都可以轉為void *類型,且不會丟失信息。如果將結果再轉換為初始指針類型,則可以恢復初始指針。
void *vp; char *cp; vp = cp; /*指向任何類型的指針都可以轉為void *類型,且無需強制轉換*/ cp = (char *)vp;


但是需要注意:“空類型”可以包容“有類型”,而“有類型”則不能包容“空類型”。

void *p1; int *p2; p2 = p1; C編譯 是OK的 C++編譯出現 錯誤: 從類型‘void*’到類型‘int*’的轉換無效 [-fpermissive]

1)#define NULL (void*)0
定義NULL為指向內存位置為0的空指針。
NULL表示內存位置0,NULL指針并不指向任何對象。因此除非是用于賦值或比較運算,出于其他任何目的使用NULL指針都是非法的

2)將整型數值轉為指針
#define BUFFER_END 0x200000 void * b = (void *) BUFFER_END; if (b == (void *) 0x100000) b = (void *) 0xA0000;

指向特定類型的指針可以進行算術運算(+、-)和關系運算(==、!=、<、>、>=、<=),空類型指針不可以。


3、void修飾函數返回值和參數

如果函數沒有返回值,那么應聲明為 void 類型。在 C 語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回 整型值 處理,但是許多程序員卻誤認為其為 void 類型。

#include <stdio.h>void main (void) {printf ("hello world!\n");return 0; } 編譯出現: 警告: 在無返回值的函數中,‘return’帶返回值 [默認啟用] #include <stdio.h>main () {printf ("hello world!\n");return 0; } 編譯OK

因此,為了避免混亂,我們在編寫 C 程序時,對于任何函數都必須一個不漏地指定其類型,如果函數沒有返回值,一定要聲明為 void 類型。

再有,無論在 C 還是 C++中,若函數不接受任何參數,一定要指明參數為 void。

總結

以上是生活随笔為你收集整理的C语言再学习 -- 关键字void的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。