當前位置:首頁 » 編程語言 » c語言void指針

c語言void指針

發布時間: 2022-07-23 08:03:49

c語言中void是什麼意思

void真正發揮的作用在於: (1) 對函數返回的限定; (2) 對函數參數的限定。

1、void的含義:

void的字面意思是「無類型」,void *則為「無類型指針」,void *可以指向任何類型的數據。
void幾乎只有「注釋」和限製程序的作用,因為從來沒有人會定義一個void變數,讓我們試著來定義:

void a;

這行語句編譯時會出錯,提示「illegal use of type 'void'」。不過,即使void a的編譯不會出錯,它也沒有任何實際意義。

2、void的使用規則:

規則一:如果函數沒有返回值,那麼應聲明為void類型

在C語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回整型值處理。但是許多程序員卻誤以為其為void類型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
}

程序運行的結果為輸出:2 + 3 = 5,這說明不加返回值說明的函數的確為int函數。

規則二:如果函數無參數,那麼應聲明其參數為void。

在C++語言中聲明一個這樣的函數:

int function(void)

{

return 1;

}

則進行下面的調用是不合法的:

function(2);

因為在C++中,函數參數為void的意思是這個函數不接受任何參數。在Turbo C 2.0中編譯:

#include "stdio.h"

fun()

{

return 1;

}

main()

{

printf("%d",fun(2));

getchar();

}

編譯正確且輸出1,這說明,在C語言中,可以給無參數的函數傳送任意類型的參數,但是在C++編譯器中編譯同樣的代碼則會出錯。在C++中,不能向無參數的函數傳送任何參數,出錯提示「'fun' : function does not take 1 parameters」。

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

3、void具體使用例子:

定義函數
返回值 函數名(參數1,參數2,參數3,.......)
{內容}
int sum(int a,int b)

int c;
return c;}

其中第一個int是返回值 就是別的函數調用此函數時這個函數給他的一個值。

如果調用時不需要返回值,則函數寫為
void sum(int a,int b){....} 此時函數沒有返回值
如果不需要參數 則int sum(void){...}
此時void的意義為空,就是沒有參數的意思
如果都不要 則為void sum(void);

(1)c語言void指針擴展閱讀:

void不能代表一個真實的變數。下面代碼都企圖讓void代表一個真實的變數,因此都是錯誤的代碼:

void a; //錯誤

function(void a); //錯誤

void體現了一種抽象,這個世界上的變數都是「有類型」。

void的出現只是為了一種抽象的需要,如果你正確地理解了面向對象中「抽象基類」的概念,也很容易理解void數據類型。正如不能給抽象基類定義一個實例,我們也不能定義一個void(讓我們類比的稱void為「抽象數據類型」)變數。

參考資料:void(計算機語言關鍵字)_網路

⑵ C語言程序設計中的int和void 是什麼意思

1、Int是將一個數值向下取整為最接近的整數的函數。INT是資料庫中常用函數中的取整函數,常用來判別一個數能否被另一個數整除。

2、void*則為「無類型指針」,void*可以指向任何類型的數據。常用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明。

(2)c語言void指針擴展閱讀

void的作用:

1、對函數返回的限定,這種情況我們比較常見。

2、對函數參數的限定,這種情況也是比較常見的。

3、一般我們常見的就是這兩種情況:

當函數不需要返回值值時,必須使用void限定,這就是我們所說的第一種情況。例如:voidfunc(inta,char*b)。

當函數不允許接受參數時,必須使用void限定,這就是我們所說的第二種情況。例如:intfunc(void)。

4、void指針的使用規則:

void指針可以指向任意類型的數據,就是說可以用任意類型的指針對void指針對void指針賦值。

⑶ c語言中void是什麼意思有什麼用處

c語言中的void基本上就是兩個意思: 無,沒有 任意類型 這兩個意思,與void出現的代碼位置和修飾變數相關: 函數返回值位置,如: void func(int i) ; //表示func()函數沒有返回值,void不可省 函數參數位置,如: void func( void ) ; //表示func()函數即沒有返回值,也沒有參數。

⑷ C語言void型指針有什麼用

把*a = 'k';改成*((char*)a) = 'k';就好了
用void*做形參是可以改變實參的值的,但是你的形參是'k',子函數中重新賦值也是'k',你是怎麼知道改變或者沒有改變的?
舉個簡單的例子,malloc函數的返回值為void*
但是我們經常這樣寫:
char *pc = (char *)malloc(100*sizeof(char));
int *a = (int *)malloc(100*sizeof(int));
他們都是完全正確的寫法,void*所修飾的地址是可以強轉成其他任何類型而不會出現不兼容的現象。
還有你的題目為什麼要使用 void*呢,你的題目其實使用char *就完全可以了,子函數中也不需要強轉的,但是建議你的實參跟子函數中的重新賦值寫成不一樣的你才好觀察,你寫的兩個都是'k'變沒變你也不知道。

⑸ C語言void指針到底是什麼什麼時候使用void指針

(1)用空指針終止對遞歸數據結構的間接引用。
遞歸是指一個事物由這個事物本身來定義。請看下例:
/*Dumb implementation;should use a loop */
unsigned factorial(unsinged i)
{
if(i=0 || i==1)
{
return 1;
}
else
{
return i * factorial(i-1);
}
}
在上例中,階乘函數factoriai()調用了它本身,因此,它是遞歸的。
一個遞歸數據結構同樣由它本身來定義。最簡單和最常見的遞歸數據結構是(單向)鏈表,鏈表中的每一個元素都包含一個值和一個指向鏈表中下一個元素的指針。請看下例:
struct string_list
{
char *str; /* string(inthiscase)*/
struct string_list *next;
};
此外還有雙向鏈表(每個元素還包含一個指向鏈表中前一個元素的指針)、鍵樹和哈希表等許多整潔的數據結構,一本較好的介紹數據結構的書中都會介紹這些內容。
你可以通過指向鏈表中第一個元素的指針開始引用一個鏈表,並通過每一個元素中指向下一個元素的指針不斷地引用下一個元素;在鏈表的最後一個元素中,指向下一個元素的指針被賦值為NULL,當你遇到該空指針時,就可以終止對鏈表的引用了。請看下例:
while(p!=NULL)
{
/*dO something with p->str*/
p=p->next;
}
請注意,即使p一開始就是一個空指針,上例仍然能正常工作。
(2)用空指針作函數調用失敗時的返回值。
許多C庫函數的返回值是一個指針,在函數調用成功時,函數返回一個指向某一對象的指針;反之,則返回一個空指針。請看下例:
if(setlocale(cat,loc_p)==NULL)
{
/* setlocale()failed;do something*/
/* ...*/
}
返回值為一指針的函數在調用成功時幾乎總是返回一個有效指針(其值不等於零),在調用失敗時則總是返回一個空指針(其值等於零);而返回值為一整型值的函數在調用成功時幾乎總是返回一個零值,在調用失敗時則總是返回一個非零值。請看下例:
if(raise(sig)!=0){
/* raise()failed;do something*/
/* ... */
}
對上述兩類函數來說,調用成功或失敗時的返回值含義都是不同的。另外一些函數在調用成功時可能會返回一個正值,在調用失敗時可能會返回一個零值或負值。因此,當你使用一個函數之前,應該先看一下它的返回值是哪種類型,這樣你才能判斷函數返回值的含義。
(3)用空指針作警戒值
警戒值是標志事物結尾的一個特定值。例如,main()函數的預定義參數argv是一個指針數組,它的最後一個元素(argv[argc])永遠是一個空指針,因此,你可以用下述方法快速地引用argv中的每一個元素:
/*
A simple program that prints all its arguments.
It doesn't use argc ("argument count"); instread.
it takes advantage of the fact that the last
value in argv ("argument vector") is a null pointer.
*/
# include <stdio. h>
# include <assert. h>
int
main ( int argc, char * * argv)
{
int i;
printf ("program name = \"%s\"\n", argv[0]);
for (i=l; argv[i] !=NULL; ++i)
printf ("argv[%d] = \"%s\"\n", i, argv[f]);
assert (i = = argc) ; / * see FAQ XI. 5 * /
return 0; / * see FAQ XVI. 4 * /
}

⑹ 關於c語言的函數指針void

返回值類型是 void,即沒有返回值。 另外,這個 void (*fun)(int) 不是函數,而是函數指針。

⑺ void是什麼意思指針又是什麼意思(c語言)

void 在C語言裡面表示沒有類型,比如 void函數表示沒有返回值
而且C語言中沒有定義void究竟是多大內存

指針在本質上也是一個變數,也需要佔用一定的內存空間,其用於保存內存地址的值,可以通過指針修改內存中的任意地址的內容

熱點內容
說話加密 發布:2025-01-31 14:02:28 瀏覽:552
android倉庫管理系統 發布:2025-01-31 14:02:27 瀏覽:700
batsql語句 發布:2025-01-31 14:00:13 瀏覽:733
沈陽加密狗 發布:2025-01-31 13:54:58 瀏覽:705
聯想伺服器怎麼裝windows7 發布:2025-01-31 13:54:52 瀏覽:874
java二級考試歷年真題 發布:2025-01-31 13:50:31 瀏覽:171
編程一刻 發布:2025-01-31 13:36:44 瀏覽:585
編程小草出土 發布:2025-01-31 13:33:27 瀏覽:579
如何設置伺服器屏蔽你的ip 發布:2025-01-31 13:25:58 瀏覽:243
扣扣的獨立密碼是什麼密碼 發布:2025-01-31 13:23:42 瀏覽:132