专题一关键字的剖析----4.goto,void,extern,sizeof的分析

goto语句破坏程序的顺序执行,如果跳过某些内存的释放语句,就会造成内存泄漏,程序崩溃。


void的意义:修饰函数表示该函数没有返回值,修饰函数的参数表示函数没有参数。

C语言没有定义void的大小,只定义了void类型表示无。由编译器厂商自行设定。

    printf(“%d\n”,sizeof(void));      

    //gcc中为1g++则报错,c++中void不对应任何一种类型。


void指针的意义

    C语言规定只有相同类型的指针才可以互相赋值。

    void*指针作为左值可以接收任意类型的指针。

    void*类型作为右值赋值给其它指针时需要强制类型转换。

    int*  p1=(int*)malloc(sizeof(int));


Memset函数的设计:

  1.     接收的参数(void* p,char v,int size);
  2.     实现的算法(for循环进行内存设置);
  3.     返回值(return p)。

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用于声明外部定义的变量和函数;

extern用于指示非标准C语言编译器用标准C语言的方式编译(编译器有其默认的编译方式,比如C++)。

extern “C”
{
    int fun(int a,int b)
    {
       return a+b;
    }
}


extern实例:

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是编译器内置的关键字,指示符,不是函数。用于计算相应实体所占的内存大小。sizeof在编译时就已经得到了结果,而函数要在运行时才能知道结果。

int a;
printf(“%d\n”,sizeof(a));
printf(“%d\n”,sizeof a);
printf(“%d\n”,sizeof(int));




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值