• goto,void,extern,sizeof分析


    goto:

    程序的质量与goto出现的次数成反比,禁用

    goto的副作用:破环了程序的结构化的顺序执行的过程,它有可能会跳过程序的应该执行的一些步骤。

    void:

    修饰函数返回值和参数

    c语言中没有定义void的内存空间的大小,无法在内存中裁剪出void对应的变量,但是不同的编译器,可能为该数据类型定义了内存空间大小,并且标准还不一致。

    printf("%d ",sizeof(void));执行的结果在不同的编译器中,结果可能不同。

    void*:

    作为左值,用于接收任意类型的指针

    作为右值,赋值给其他类型的指针时,需要强制类型转换

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

    void* pc1=pc2=NULL;

    pc1=pi;

    pi=(int*)pc1; //正确写法

    pi=pc2; //可能一些编译器也能通过,但是就语法结构而言,说明该编译器不够规范。

     1 //*******test4.c********
     2 void* my_memset(void* p,char v,int size) 
     3 {
     4   void* ret=p;
     5   int i=0;
     6   char* dest=(char*)p;
     7   for(i=0;i<size;i++)
     8   {
     9     dest[i]=v;
    10   }
    11   return ret;
    12 }
    13 
    14 int main()
    15 {
    16   int abc[5]={1,2,3,4,5};
    17   my_memset(abc,0,sizeof(abc));
    18   for(int i=0;i<5;i++)
    19   printf("%d
    ",abc[i]);
    20   return 0;
    21 }

    函数中参数void* p 表示可以接受所有类型变量的指针,这就是void*的好处。

    extern用来声明外部定义的变量或函数,外部体现在另一个文件中定义,在文件中声明之后,就可以调用这个函数或是使用这个变量:

    extern int abc;

    extern int func(int a,int b);

    第二个作用:用来告诉c编译器用C方式编译。

    extern "c"

    {

        int add(int a,int b)

         {

                 return a+b;

          }

    }

    sizeof是编译器的内置指示符,不是函数;用于“计算”相应的实体所占用的内存大小;sizeof的值在编译期就已经确定:

    int  abc;

    sizeof(a),sizeof(int)

    printf("%d ",sizeof(a)); //4

    printf("%d ",sizeof a); //4

    printf("%d ",sizeof(int)); //4

    内在的趣味,表面的繁琐
  • 相关阅读:
    MinGW
    zip ubuntu使用
    7zip ubuntu使用
    ffmpeg入门
    音频采样
    购房需知
    linux网络配置相关
    挂载与卸载
    spring boot启动异常:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver
    获取配置文件yml的@ConfigurationProperties和@Value的区别
  • 原文地址:https://www.cnblogs.com/data1213/p/4819968.html
Copyright © 2020-2023  润新知