void不是c语言的关键字之一,C语言深度剖析--读书笔记_void 关键字

void类型的主要作用:限定函数返回类型,限定函数参数类型

1.指针赋值:

(1)两种不同类型的指针,不能直接相互赋值(涉及void类型的除外)

例1:

long *p1;

int * p2;

p1=p2;

警告:从不兼容的指针类型赋值

(2)void类型的指针,可以接受任意类型的指针。但是,不能直接把void指针直接赋值给其他

例2:

void *p1;

int *p2;

p1=p2; // ok ,没有任何问题

p2=p1;//不可以,不能把void类型的指针,直接赋值给 其他类型的指针。

2.void限定函数的返回值类型,和参数类型:

(1)不指定返回值,并不等于,返回值为void。编译器把未制定返回类型,作为返回整型处理。

例3:

func1() //func1函数,并没有制定返回类型

{

return 10;

}

int main()

{

printf("func1 returns a value:%d\n",func1()); //把func1()的返回值,作为int处理了

return 0;

}

打印结果:func1 returns a value:10

(2)函数参数列表为空,不代表该函数不能接受参数(在C中可以)。只有在函数参数列表中,指明void,该函数才被认为不可接受参数。

例4:

func1()

{

return 10;

}

int main()

{

printf("func1 returns a value:%d\n",func1(2)); //注意,这里向func1中传了一个参数..

return 0;

}

打印结果:func1 returns a value:10

函数编译通过,正常执行。这样容易引起误解,函数在定义的时候无参,为何还可以传参。所以在定义函数的时候,如果函数无参,那么要指明参数为void

例5:

func1(void)

{

return 10;

}

int main()

{

printf("func1 returns a value:%d\n",func1(2));

return 0;

}

打印结果:提供给func1函数的参数过多!

3.void指针的运算

首先,ANSI与GNU关于void指针操作,有不同规定。

(1)在ANSI标准中,进行算法操作的指针,必须是确定其所指数据类型大小的。(这里的指针算法操作指:p++,p+=1...)

例6:

void *pvoid;

pvoid++; //报错

在ANSI中,因为不知道pvoid指向何种类型,自然也不知道其所指的对象有多大的内存。这样,pvoid++就没有意义。

(2)在GNU中,它指定void指针的操作,等同与char型指针。

例7:

void *p1;

printf("before ++,p1 is 0x%x\n",p1);

p1++;

printf("after  ++,p1 is 0x%x\n",p1);

打印结果:

before ++,p1 is 0xaa0ff4

after     ++,p1 is 0xaa0ff5

由上可见,p1++后,地址比之前增加了1。所以,在GNU中,void指针的运算,是按照char规则来处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值