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;
}
实验结果
说明:
喝水不忘挖井人,相关内容均转自狄泰软件学院,唐老师相关讲述