goto----禁用goto
void
void----修饰函数返回值和参数仅为了代表
无
----c语言没有定义void究竟是多大内存的别名----代码灰色地带----有些编译器sizeof(void)=1,有些直接报错----不允许有void内存变量(void不能当模子)
void指针:
-
C语言规定只有相同类型的指针才可以相互赋值
-
void*指针作为左值用于“接收”任意类型的指针
-
void*指针作为右值赋值给其它指针时需要强制类型转换
例子:
#include <stdio.h>
void *my_memset(void *p,char v,int size) //void* 作为左值,能接收任意类型的内存地址值
{
void *ret = p;
char *dest = (char *)p;//作为右值,赋值给其它指针时需要强制类型转换
for(int i = 0; i < size; i++){
dest[i] = v;
}
return ret;
}
int main()
{
int a[5] = {1,2,3,4,5};
int i = 0;
for(int i = 0; i < 5; i++){
printf("%d\n",a[i]);
}
my_memset(a,0,sizeof(a));
for(int i = 0; i < 5; i++){
printf("%d\n",a[i]);
}
return 0;
}
extern
extern----用于
声明外部定义的变量和函数
----还可以用于
"告诉"编译器用c方式编译
C++编译器和一些变种C编译器默认会按“自己”的方式编译函数和变量,通过extern关键可以命令编译器“以标准C方式进行编译”。
sizeof
sizeof----是编译器的内置指示符(关键字),不是函数----用于"计算"相应实体所占内存的大小----它的值在函数编译期已经确定
#include <stdio.h>
int main()
{
int a;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);//sizeof不是函数,是编译器内置的关键字,它用于检测一个实体占用内存的大小
printf("%d\n", sizeof(int));
//printf("%d\n", sizeof int);//错误,int前面只能出现某些关键字,比如:signed; unsigned; const; one time
return 0;
}