-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一
goto 副作用分析
#include <stdio.h>
void func(int n)
{
int* p = NULL;
if( n < 0 )
{
goto STATUS;
}
p = malloc(sizeof(int) * n);
STATUS:
p[0] = n;
}
int main()
{
f(1);
f(-1);
return 0;
}
第二:
void 指针的意义
C 语言规定只有相同类型的指针才可以相互赋值
void* 指针作为左值用于“ 接收”任意类型的指针
void* 指针作为右值赋值给其它指针时需要强制类型转换
void* 指针的使用
实现memset
#include <stdio.h>
//void* p可以接受任何类型的值
void* my_memset(void* p, char v, int size)
{
void* ret =p;
char* dest = (char*)p;//强制类型转换 右值有指针 单位为1个字节
int i = 0;
for(i=0;i<size;i++)
{
dest[i] = v;
}
return ret;
}
int main()
{
int a[5] = {1,2,3,4,5};
int i = 0;
for( i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
memset(a,0,sizeof(a));
for( i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
第三
extern 使用分析
// test.c
#include <stdio.h>
/*
extern "C"
{
int add(int a, int b)
{
return a + b;
}
}
*/
extern int g;
extern int get_min(int a, int b);
int main()
{
return 0;
}
// test2.c
int g = 100;
int get_min(int a, int b)
{
return (a < b) ? a : b;
}
第四:
sizeof 是编译器的内置指示符 , 不是函数
sizeof 用于“ 计算” 相应实体所占的内存大小
sizeof 的值在编译期就已经确定
#include <stdio.h>
int main()
{
int a;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);
printf("%d\n", sizeof(int));
return 0;
}