ºìÁªLinuxÃÅ»§
Linux°ïÖú

C/C++ÓïÑÔvoid¼°voidÖ¸ÕëÉî²ã̽Ë÷

·¢²¼Ê±¼ä:2006-05-03 11:27:14À´Ô´:ºìÁª×÷Õß:°®µÄ±ßÔµ
1.¸ÅÊö

Ðí¶à³õѧÕ߶ÔC/C++ÓïÑÔÖеÄvoid¼°voidÖ¸ÕëÀàÐͲ»ÉõÀí½â£¬Òò´ËÔÚʹÓÃÉϳöÏÖÁËһЩ´íÎó¡£±¾ÎĽ«¶Ôvoid¹Ø¼ü×ÖµÄÉî¿Ìº¬Òå½øÐнâ˵£¬²¢ÏêÊövoid¼°voidÖ¸ÕëÀàÐ͵ÄʹÓ÷½·¨Óë¼¼ÇÉ¡£

2.voidµÄº¬Òå

voidµÄ×ÖÃæÒâ˼ÊÇ¡°ÎÞÀàÐÍ¡±£¬void *ÔòΪ¡°ÎÞÀàÐÍÖ¸Õ롱£¬void *¿ÉÒÔÖ¸ÏòÈκÎÀàÐ͵ÄÊý¾Ý¡£

void¼¸ºõÖ»ÓС°×¢ÊÍ¡±ºÍÏÞÖƳÌÐòµÄ×÷Óã¬ÒòΪ´ÓÀ´Ã»ÓÐÈ˻ᶨÒåÒ»¸övoid±äÁ¿£¬ÈÃÎÒÃÇÊÔ×ÅÀ´¶¨Ò壺

void a;

ÕâÐÐÓï¾ä±àÒëʱ»á³ö´í£¬Ìáʾ¡°illegal use of type ¡®void¡®¡±¡£²»¹ý£¬¼´Ê¹void aµÄ±àÒë²»»á³ö´í£¬ËüҲûÓÐÈκÎʵ¼ÊÒâÒå¡£

voidÕæÕý·¢»ÓµÄ×÷ÓÃÔÚÓÚ£º

£¨1£© ¶Ôº¯Êý·µ»ØµÄÏÞ¶¨£»

£¨2£© ¶Ôº¯Êý²ÎÊýµÄÏÞ¶¨¡£

ÎÒÃǽ«ÔÚµÚÈý½Ú¶ÔÒÔÉ϶þµã½øÐоßÌå˵Ã÷¡£

ÖÚËùÖÜÖª£¬Èç¹ûÖ¸Õëp1ºÍp2µÄÀàÐÍÏàͬ£¬ÄÇôÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚp1ºÍp2¼ä»¥Ïำֵ£»Èç¹ûp1ºÍp2Ö¸Ïò²»Í¬µÄÊý¾ÝÀàÐÍ£¬Ôò±ØÐëʹÓÃÇ¿ÖÆÀàÐÍת»»ÔËËã·û°Ñ¸³ÖµÔËËã·ûÓұߵÄÖ¸ÕëÀàÐÍת»»Îª×ó±ßÖ¸ÕëµÄÀàÐÍ¡£

ÀýÈ磺

float *p1;
int *p2;
p1 = p2;

¡¡¡¡ÆäÖÐp1 = p2Óï¾ä»á±àÒë³ö´í£¬Ìáʾ¡°¡®=¡® : cannot convert
from ¡®int *¡® to ¡®float *¡®¡±£¬±ØÐë¸ÄΪ£º
p1 = (float *)p2;

¶øvoid *Ôò²»Í¬£¬ÈκÎÀàÐ͵ÄÖ¸Õ붼¿ÉÒÔÖ±½Ó¸³Öµ¸øËü£¬
ÎÞÐè½øÐÐÇ¿ÖÆÀàÐÍת»»£º

void *p1;
int *p2;
p1 = p2;

µ«Õâ²¢²»Òâζ×Å£¬void *Ò²¿ÉÒÔÎÞÐèÇ¿ÖÆÀàÐÍת»»µØ¸³¸øÆäËüÀàÐ͵ÄÖ¸Õë¡£
ÒòΪ¡°ÎÞÀàÐÍ¡±¿ÉÒÔ°üÈÝ¡°ÓÐÀàÐÍ¡±£¬¶ø¡°ÓÐÀàÐÍ¡±Ôò²»ÄÜ°üÈÝ¡°ÎÞÀàÐÍ¡±¡£
µÀÀíºÜ¼òµ¥£¬ÎÒÃÇ¿ÉÒÔ˵¡°ÄÐÈ˺ÍÅ®È˶¼ÊÇÈË¡±£¬µ«²»ÄÜ˵¡°ÈËÊÇÄÐÈË¡±
»òÕß¡°ÈËÊÇÅ®ÈË¡±¡£ÏÂÃæµÄÓï¾ä±àÒë³ö´í£º

bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">


  

void *p1;
int *p2;
p2 = p1;

¡¡¡¡Ìáʾ¡°¡®=¡® : cannot convert from ¡®void *¡® to ¡®int *¡®¡±¡£

3.voidµÄʹÓÃ

ÏÂÃæ¸ø³ö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º¯Êý¡£

ÁÖÈñ²©Ê¿¡¶¸ßÖÊÁ¿C/C++±à³Ì¡·ÖÐÌáµ½£º¡°C++ÓïÑÔÓкÜÑϸñµÄÀàÐÍ°²È«¼ì²é£¬²»ÔÊÐíÉÏÊöÇé¿ö£¨Ö¸º¯Êý²»¼ÓÀàÐÍÉùÃ÷£©·¢Éú¡±¡£¿ÉÊDZàÒëÆ÷²¢²»Ò»¶¨ÕâôÈ϶¨£¬Æ©ÈçÔÚVisual C++6.0ÖÐÉÏÊöaddº¯ÊýµÄ±àÒëÎÞ´íÒ²ÎÞ¾¯¸æÇÒÔËÐÐÕýÈ·£¬ËùÒÔ²»ÄܼÄÏ£ÍûÓÚ±àÒëÆ÷»á×öÑϸñµÄÀàÐͼì²é¡£

Òò´Ë£¬ÎªÁ˱ÜÃâ»ìÂÒ£¬ÎÒÃÇÔÚ±àдC/C++³ÌÐòʱ£¬¶ÔÓÚÈκκ¯Êý¶¼±ØÐëÒ»¸ö²»Â©µØÖ¸¶¨ÆäÀàÐÍ¡£Èç¹ûº¯ÊýûÓзµ»ØÖµ£¬Ò»¶¨ÒªÉùÃ÷ΪvoidÀàÐÍ¡£Õâ¼ÈÊdzÌÐòÁ¼ºÃ¿É¶ÁÐÔµÄÐèÒª£¬Ò²ÊDZà³Ì¹æ·¶ÐÔµÄÒªÇó¡£ÁíÍ⣬¼ÓÉÏvoidÀàÐÍÉùÃ÷ºó£¬Ò²¿ÉÒÔ·¢»Ó´úÂëµÄ¡°×Ô×¢ÊÍ¡±×÷ÓᣴúÂëµÄ¡°×Ô×¢ÊÍ¡±¼´´úÂëÄÜ×Ô¼º×¢ÊÍ×Ô¼º¡£

¹æÔò¶þ Èç¹ûº¯ÊýÎÞ²ÎÊý£¬ÄÇôӦÉùÃ÷Æä²ÎÊýΪvoid

ÔÚC++ÓïÑÔÖÐÉùÃ÷Ò»¸öÕâÑùµÄº¯Êý£º

int function(void)
{
return 1;
}

Ôò½øÐÐÏÂÃæµÄµ÷ÓÃÊDz»ºÏ·¨µÄ£º

function(2);

ÒòΪÔÚC++ÖУ¬º¯Êý²ÎÊýΪvoidµÄÒâ˼ÊÇÕâ¸öº¯Êý²»½ÓÊÜÈκβÎÊý¡£

ÎÒÃÇÔÚTurbo C 2.0ÖбàÒ룺

#include "stdio.h"
fun()
{
return 1;
}
main()
{
printf("%d",fun(2));
getchar();
}

±àÒëÕýÈ·ÇÒÊä³ö1£¬Õâ˵Ã÷£¬ÔÚCÓïÑÔÖУ¬¿ÉÒÔ¸øÎÞ²ÎÊýµÄº¯Êý´«ËÍÈÎÒâÀàÐ͵IJÎÊý£¬µ«ÊÇÔÚC++±àÒëÆ÷ÖбàÒëͬÑùµÄ´úÂëÔò»á³ö´í¡£ÔÚC++ÖУ¬²»ÄÜÏòÎÞ²ÎÊýµÄº¯Êý´«ËÍÈκβÎÊý£¬³ö´íÌáʾ¡°¡®fun¡® : function does not take 1 parameters¡±¡£

ËùÒÔ£¬ÎÞÂÛÔÚC»¹ÊÇC++ÖУ¬Èôº¯Êý²»½ÓÊÜÈκβÎÊý£¬Ò»¶¨ÒªÖ¸Ã÷²ÎÊýΪvoid¡£

¹æÔòÈý СÐÄʹÓÃvoidÖ¸ÕëÀàÐÍ

°´ÕÕANSI(American National Standards Institute)±ê×¼£¬²»ÄܶÔvoidÖ¸Õë½øÐÐËã·¨²Ù×÷£¬¼´ÏÂÁвÙ×÷¶¼ÊDz»ºÏ·¨µÄ£º

void * pvoid;
pvoid++; //ANSI£º´íÎó
pvoid += 1; //ANSI£º´íÎó
//ANSI±ê×¼Ö®ËùÒÔÕâÑùÈ϶¨£¬ÊÇÒòΪËü¼á³Ö£º½øÐÐËã·¨²Ù×÷µÄÖ¸Õë±ØÐëÊÇÈ·¶¨ÖªµÀÆäÖ¸ÏòÊý¾ÝÀàÐÍ´óСµÄ¡£
//ÀýÈ磺
int *pint;
pint++; //ANSI£ºÕýÈ·

¡¡¡¡pint++µÄ½á¹ûÊÇʹÆäÔö´ósizeof(int)¡£

µ«ÊÇ´óÃû¶¦¶¦µÄGNU(GNU¡®s Not UnixµÄËõд)Ôò²»ÕâôÈ϶¨£¬ËüÖ¸¶¨void *µÄËã·¨²Ù×÷Óëchar *Ò»Ö¡£

¡¡¡¡Òò´ËÏÂÁÐÓï¾äÔÚGNU±àÒëÆ÷ÖнÔÕýÈ·£º
pvoid++; //GNU£ºÕýÈ·
pvoid += 1; //GNU£ºÕýÈ·

¡¡¡¡pvoid++µÄÖ´Ðнá¹ûÊÇÆäÔö´óÁË1¡£

¡¡¡¡ÔÚʵ¼ÊµÄ³ÌÐòÉè¼ÆÖУ¬ÎªÓ­ºÏANSI±ê×¼£¬²¢Ìá¸ß³ÌÐòµÄ¿ÉÒÆÖ²ÐÔ£¬ÎÒÃÇ¿ÉÒÔÕâÑù±àдʵÏÖͬÑù¹¦ÄܵĴúÂ룺
void * pvoid;
(char *)pvoid++; //ANSI£ºÕýÈ·£»GNU£ºÕýÈ·
(char *)pvoid += 1; //ANSI£º´íÎó£»GNU£ºÕýÈ·

GNUºÍANSI»¹ÓÐһЩÇø±ð£¬×ÜÌå¶øÑÔ£¬GNU½ÏANSI¸ü¡°¿ª·Å¡±£¬ÌṩÁ˶Ըü¶àÓï·¨µÄÖ§³Ö¡£µ«ÊÇÎÒÃÇÔÚÕæʵÉè¼Æʱ£¬»¹ÊÇÓ¦¸Ã¾¡¿ÉÄܵØÓ­ºÏANSI±ê×¼¡£

¹æÔòËÄ Èç¹ûº¯ÊýµÄ²ÎÊý¿ÉÒÔÊÇÈÎÒâÀàÐÍÖ¸Õ룬ÄÇôӦÉùÃ÷Æä²ÎÊýΪvoid *

µäÐ͵ÄÈçÄÚ´æ²Ù×÷º¯ÊýmemcpyºÍmemsetµÄº¯ÊýÔ­ÐÍ·Ö±ðΪ£º

void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );

ÕâÑù£¬ÈκÎÀàÐ͵ÄÖ¸Õ붼¿ÉÒÔ´«ÈëmemcpyºÍmemsetÖУ¬ÕâÒ²ÕæʵµØÌåÏÖÁËÄÚ´æ²Ù×÷º¯ÊýµÄÒâÒ壬ÒòΪËü²Ù×÷µÄ¶ÔÏó½ö½öÊÇһƬÄڴ棬¶ø²»ÂÛÕâƬÄÚ´æÊÇʲôÀàÐÍ¡£Èç¹ûmemcpyºÍmemsetµÄ²ÎÊýÀàÐͲ»ÊÇvoid *£¬¶øÊÇchar *£¬ÄDzŽÐÕæµÄÆæ¹ÖÁË£¡ÕâÑùµÄmemcpyºÍmemsetÃ÷ÏÔ²»ÊÇÒ»¸ö¡°´¿´âµÄ£¬ÍÑÀëµÍ¼¶È¤Î¶µÄ¡±º¯Êý£¡

ÏÂÃæµÄ´úÂëÖ´ÐÐÕýÈ·£º


//ʾÀý£ºmemset½ÓÊÜÈÎÒâÀàÐÍÖ¸Õë

int intarray[100];
memset ( intarray, 0, 100*sizeof(int) ); //½«intarrayÇå0

//ʾÀý£ºmemcpy½ÓÊÜÈÎÒâÀàÐÍÖ¸Õë
int intarray1[100], intarray2[100];
memcpy ( intarray1, intarray2, 100*sizeof(int) ); //½«intarray2¿½±´¸øintarray1

ÓÐȤµÄÊÇ£¬memcpyºÍmemsetº¯Êý·µ»ØµÄÒ²ÊÇvoid *ÀàÐÍ£¬±ê×¼¿âº¯ÊýµÄ±àдÕßÊǶàôµØ¸»ÓÐѧÎÊ°¡£¡

¹æÔòÎå void²»ÄÜ´ú±íÒ»¸öÕæʵµÄ±äÁ¿

ÏÂÃæ´úÂ붼ÆóͼÈÃvoid´ú±íÒ»¸öÕæʵµÄ±äÁ¿£¬Òò´Ë¶¼ÊÇ´íÎóµÄ´úÂ룺


void a; //´íÎó

function(void a); //´íÎó

voidÌåÏÖÁËÒ»ÖÖ³éÏó£¬Õâ¸öÊÀ½çÉϵıäÁ¿¶¼ÊÇ¡°ÓÐÀàÐÍ¡±µÄ£¬Æ©ÈçÒ»¸öÈ˲»ÊÇÄÐÈ˾ÍÊÇÅ®ÈË£¨»¹ÓÐÈËÑý£¿£©¡£

voidµÄ³öÏÖÖ»ÊÇΪÁËÒ»ÖÖ³éÏóµÄÐèÒª£¬Èç¹ûÄãÕýÈ·µØÀí½âÁËÃæÏò¶ÔÏóÖС°³éÏó»ùÀࡱµÄ¸ÅÄҲºÜÈÝÒ×Àí½âvoidÊý¾ÝÀàÐÍ¡£ÕýÈç²»Äܸø³éÏó»ùÀඨÒåÒ»¸öʵÀý£¬ÎÒÃÇÒ²²»Äܶ¨ÒåÒ»¸övoid£¨ÈÃÎÒÃÇÀà±ÈµÄ³ÆvoidΪ¡°³éÏóÊý¾ÝÀàÐÍ¡±£©±äÁ¿¡£

4.×ܽá

ССµÄvoidÔ̲ØןܷḻµÄÉè¼ÆÕÜѧ£¬×÷ΪһÃû³ÌÐòÉè¼ÆÈËÔ±£¬¶ÔÎÊÌâ½øÐÐÉîÒ»¸ö²ã´ÎµÄ˼¿¼±ØȻʹÎÒÃÇÊÜÒæ·Ëdz¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ