4. goto、void、extern、sizeof分析

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;
}
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值