goto,void,extern,sizeof分析
goto:
程序的质量与goto出现的次数成反比,禁用
goto的副作用:破环了程序的结构化的顺序执行的过程,它有可能会跳过程序的应该执行的一些步骤。
void:
修饰函数返回值和参数
c语言中没有定义void的内存空间的大小,无法在内存中裁剪出void对应的变量,但是不同的编译器,可能为该数据类型定义了内存空间大小,并且标准还不一致。
printf("%d\n",sizeof(void));执行的结果在不同的编译器中,结果可能不同。
void*:
作为左值,用于接收任意类型的指针
作为右值,赋值给其他类型的指针时,需要强制类型转换
int* pi=(int*)malloc(sizeof(int));
void* pc1=pc2=NULL;
pc1=pi;
pi=(int*)pc1; //正确写法
pi=pc2; //可能一些编译器也能通过,但是就语法结构而言,说明该编译器不够规范。
//*******test4.c********
void* my_memset(void* p,char v,int size)
{
void* ret=p;
int i=;
char* dest=(char*)p;
for(i=;i<size;i++)
{
dest[i]=v;
}
return ret;
} int main()
{
int abc[]={,,,,};
my_memset(abc,,sizeof(abc));
for(int i=;i<;i++)
printf("%d\n",abc[i]);
return ;
}
函数中参数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\n",sizeof(a)); //4
printf("%d\n",sizeof a); //4
printf("%d\n",sizeof(int)); //4
goto,void,extern,sizeof分析的更多相关文章
- goto,void,extern,sizeof实例
1.#include <stdio.h>void func(int n){ int* p = NULL; if( n < 0 ) { goto ST ...
- void,extern,sizeof
高手潜规则:禁用goto 程序质量与goto出现次数成反比 void指针的意义 1.C语言规定只有相同类型的指针才可以相互赋值 2.void*指针作为坐值用于"接收"任意类型的指针 ...
- extern "C" 分析 -转
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语 ...
- 深刻理解void,void*和sizeof关键字
void的字面值是“无类型”,void*则是"无类型指针".void*可以指向任何类型的数据.void几乎只有"注释"和限制程序的作用,因为从来没有人会定义一个 ...
- 利用C++不使用递归,循环和goto,打印1到100 的某一答案分析
实验环境是在64位linux下使用g++编译器 下面是Mark Gordon的答案 The below one works on my system, can't guarantee res ...
- sizeof(void)有什么用
偶然发现在C中sizeof(void)是合法的,于是,对它的作用产生了疑问.查阅资料在GNU文档中发现如下解释: In GNU C, addition and subtraction operatio ...
- C语言关键字—-sizeof 、typedef、const、static、register、extern、#define
关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...
- VLC源码分析知识总结
1. 关于#和## 1.1).在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号. 比如在早 ...
- Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能对比【转】
转自:https://www.cnblogs.com/arnoldlu/p/6253665.html 测试环境:AOSP 7.1.1+Kernel 4.4.17 HW:HiKey Ubuntu 14. ...
随机推荐
- C# 方法参数传递方式 关键字(in、out、ref)
in: 值传递,默认传递方式: ref:地址/引用传递,调用时该参数必需已经初始化: out:地址/引用传递,调用时该参数不需要先初始化(被调用方负责该参数的初始化). 注1: in 关键字用于向 ...
- Hive安装 和管理
- VB-创建类模块DLL文件
最近需要调用MSCOMM32.OCX控件,但是ABAP调用过程中发现无法同时发送多条记录,则需调整实现方式: a.创建DLL文件封装MSCOMM控件相关属性及方法 b.系统注册DLL文件 c.ABAP ...
- UI5-Fiori初学者导航
正文 你是UI5和Fiori的新手?来对地方了. 对我来说,今年是不得不“跟上时代”去提升自己ABAP世界以外的技术技能的困难的一年.幸运的是,有很多可免费获得的信息和课程可以帮你实现这个跳跃.不要等 ...
- Ubuntu网卡配置
目录 1.查看所有可用网卡 2.编辑配置文件 3.添加可用网卡信息 4.重启网络服务 5.查看网卡信息 1.查看所有可用网卡 $ ifconfig -a # -a display all interf ...
- 浅谈MySQL事务及隔离级别
目录 1.什么是事务 2.事务的ACID属性 2-1.原子性(Atomicity) 2-2.一致性(Consistency) 2-3.隔离性(Isolation) 2-4.持久性(Durability ...
- ES6的export和import
export import 的4种搭配 非默认 拿函数举例,常量,变量,类也可以 // 1 可以多个export--------import带上{} export var a="123&qu ...
- Android 深入浅出 - manifest文件的使用
AndroidManifest的作用简单举例 Manifest如何解析的?
- Spark MLlib特征处理:OneHotEncoder OneHot编码 ---原理及实战
http://m.blog.csdn.net/wangpei1949/article/details/53140372 Spark MLlib特征处理:OneHotEncoder OneHot编码 - ...
- Ubuntu中更改所有子文件和子目录所有者权限
转自:http://www.linuxidc.com/Linux/2015-03/114695.htm Ubuntu中有两个修改命令可以用到,「change mode」&「change own ...