C语言之goto和void分析

1.遭人遗弃的goto

高手潜规则:禁用goto

项目经验:程序质量与goto的出现次数成反比

最后的判决:将goto打入冷宫

goto副作用测试代码

#include <stdio.h>
#include <malloc.h>

void func(int n)
{
	int* p = NULL;
	if( n < 0)
	{
		goto STATUS;
	}

	p = (int*)malloc(sizeof(int) * n);

STATUS:
	p[0] = n;
	free(p);
}

int main()
{
	printf("Begin....\n");
	printf("func(1)\n");
	func(1);
	printf("func(-1)\n");
	func(-1);
	printf("End...\n");

	return 0;
}

实验结果




2.void的意义

void修饰函数返回值和参数

-如果函数没有返回值,那么应该将其声明为void,否则默认表示返回值为int型

-如果函数没有参数,应该声明其参数为void,否则表示函数接受任意个数的参数


不存在void变量

-C语言没有定义void究竟是多大内存的别名

没有void的标尺,无法再内存中裁剪出void对应的变量


小贴士

-ANSI C:标准C语言的规范

-扩展C:在ANSI C的基础上进行了扩充



void指针的意义

-C语言规定只有相同类型的只能才可以相互赋值

-void*指针作为左值用于"接收"任意类型的指针

-void*指针作为右值使用时需要进行强制类型转换


通过void*实现MemSet函数测试代码

#include <stdio.h>

void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    
    int i = 0;
    
    for(i=0; i<length; i++)
    {
        p[i] = n;
    }
}

int main()
{
    int a[5];
    int i = 0;
    
    MemSet(a, sizeof(a), 0);
    
    for(i=0; i<5; i++)
    {
        printf("%d\n", a[i]);
    }
    
    return 0;
}

实验结果


说明:

喝水不忘挖井人,相关内容均转自狄泰软件学院,唐老师相关讲述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joyce_JTR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值