void使用方法(指针、变量、函数)

void 指针、void函数、void用法

操作方法

  • 01

    1.void *可以指向任何类型的数据 2. void真正发挥的作用在于: (1) 对函数返回的限定; (2) 对函数参数的限定。 3.例如: float *p1; int *p2; p1 = p2; 其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为: p1 = (float *)p2; 而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换: void *p1; int *p2; p1 = p2; 4.但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面语句编译出错: void *p1; int *p2; p2 = p1; 提示“'=' : cannot convert from 'void *' to 'int *'”。 15.void的使用: 规则一 如果函数没有返回值,那么应声明为void类型 规则二 如果函数无参数,那么应声明其参数为void。 规则三 小心使用void指针类型 按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,即下列操作都是不合法的: void * pvoid; pvoid++; //ANSI:错误 pvoid += 1; //ANSI:错误 //ANSI标准之所以这样认定,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的。 //例如: int *pint; pint++; //ANSI:正确 pint++的结果是使其增大sizeof(int)。( 在VC6.0上测试是sizeof(int)的倍数) 但是大名鼎鼎的GNU(GNU's Not Unix的缩写)则不这么认定,它指定void *的算法操作与char *一致。 因此下列语句在GNU编译器中皆正确: pvoid++; //GNU:正确 pvoid += 1; //GNU:正确 pvoid++的执行结果是其增大了1。( 在VC6.0上测试是sizeof(int)的倍数) 在实际的程序设计中,为迎合ANSI标准,并提高程序的可移植性,我们可以这样编写实现同样功能的代码: void * pvoid; (char *)pvoid++; //ANSI:正确;GNU:正确 (char *)pvoid += 1; //ANSI:错误;GNU:正确 GNU和ANSI还有一些区别,总体而言,GNU较ANSI更“开放”,提供了对更多语法的支持。但是我们在真实设计时,还是应该尽可能地迎合ANSI标准。 5.规则四 如果函数的参数可以是任意类型指针,那么应声明其参数为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 *,那才叫真的奇怪了!这样的memcpy和memset明显不是一个“纯粹的,脱离低级趣味的”函数! 6.规则五 void不能代表一个真实的变量 下面代码都企图让void代表一个真实的变量,因此都是错误的代码: void a; //错误 function(void a); //错误 void体现了一种抽象,这个世界上的变量都是“有类型”的,譬如一个人不是男人就是女人(还有人妖?)。

(0)

相关推荐

  • C语言函数指针变量

    操作方法 01 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量 ...

  • clean函数的使用方法(clean函数如何使用)

    Clean函数用于删除Excel中文本中所有不可打印的字符.如果这些字符位于文本前后,则可以全部删除:如果它们位于字符或单词之间,则不会全部删除,而是保留一个字符.Clean函数的工作方式与Trim函 ...

  • SUM函数的使用方法(sumif函数求和怎么用)

    在Excel函数中,大家最熟悉的莫过于SUM函数了. SUM函数,一个非常简单而且常用的函数,很多人对它的理解仅局限于用"∑"按钮自动求和的功能,例如:SUM函数大家用得最多的,可 ...

  • vlookup函数逆向查找的使用方法(lookup函数的使用方法及实例)

    Hello大家好,我是帮帮.今天跟大家分享一下超实用LOOKUP函数实例问题解决,逆向/多条件查询,办公人人必备.有个好消息!为了方便大家更快的掌握技巧,寻找捷径.请大家点击文章末尾的"了解 ...

  • Excel中mid函数的使用方法,mid函数怎么用?

    mid函数的使用方法?excel的mid函数怎么使用?excel的mid函数如何使用?excel的mid函数使用案例.下面,小编就通过几个实例来给大家介绍一下 excel的mid函数怎么使用. 操作方 ...

  • Lookup函数的使用方法(vlookup函数固定查找区域)

    原创 作者:卢子 转自:Excel不加班学员的问题,2020年10月20日已经收过了,那么现在我要收2021年的1月21日的款项了,我要怎么才能做到它们自动往下催收呢?卢子看了一下,如果根据时间的大小 ...

  • MATLAB使用方法(matlab函数怎么用)

    表达式变量与大多数其他编程语言一样,MATLAB® 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵.MATLAB 不需要任何类型声明或维度说明.当 MATLAB 遇到新的变量名 ...

  • SUMIFS函数的使用方法(sum函数的使用方法及实例)

    sumifs函数的多条件运用,你会运用sumifs函数吗?sumifs函数的使用方法你知多少?为了让没有运用过这个函数的你们,小编在这里总结了三个步骤的sumifs函数的操作,一起来看看?步骤一:在空 ...

  • Excel中VLOOKUP函数的应用方法及vlookup函数实例的下载

    规则: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 简单说明 输入数据类型 lookup_value 要查找的值 数 ...