goto语句破坏程序的顺序执行,如果跳过某些内存的释放语句,就会造成内存泄漏,程序崩溃。
void的意义:修饰函数表示该函数没有返回值,修饰函数的参数表示函数没有参数。
C语言没有定义void的大小,只定义了void类型表示无。由编译器厂商自行设定。
printf(“%d\n”,sizeof(void));
//gcc中为1;g++则报错,c++中void不对应任何一种类型。
void指针的意义
C语言规定只有相同类型的指针才可以互相赋值。
void*指针作为左值可以接收任意类型的指针。
void*类型作为右值赋值给其它指针时需要强制类型转换。
int* p1=(int*)malloc(sizeof(int));
Memset函数的设计:
void* my_memset(void* p,char v,int size)
{
void* ret=p;
char* dest=(char*)p;
int i=0;
for(i=0;i<size;i++)
{
dest[i]=v;
}
return ret;
}
extern用于声明外部定义的变量和函数;
extern用于指示非标准C语言编译器用标准C语言的方式编译(编译器有其默认的编译方式,比如C++)。
extern “C”
{
int fun(int a,int b)
{
return a+b;
}
}
Test1.c #include<stdio.h> extern int test2_g; //报错undefine extern test2_fun(); void main() { printf(“%d\n”,test2_g); printf(“%d\n”,test2_fun()); } Test2.c static Int test2_g=1; int test2_fun() { return test2_g; } //编译:gcc Test1.c Test2.c // ./a.out //结果:1
sizeof是编译器内置的关键字,指示符,不是函数。用于计算相应实体所占的内存大小。sizeof在编译时就已经得到了结果,而函数要在运行时才能知道结果。
int a; printf(“%d\n”,sizeof(a)); printf(“%d\n”,sizeof a); printf(“%d\n”,sizeof(int));