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. ...
随机推荐
- beego api 服务允许跨域访问,解决前端访问报Access-Control-Allow-Origin问题
背景: golang做了个简单服务,前端get请求拿数据,报错:No 'Access-Control-Allow-Origin' header is present on the requested ...
- SonarQube与Eclipse配合
Sonar安装 下载Sonar 点击下面网址下载Sonar: http://dist.sonar.codehaus.org/sonar-3.5.1.zip ,下载后解压 解压后安装 解压后你将要看到如 ...
- 机器学习入门-数值特征-连续数据离散化(进行分段标记处理) 1.hist(Dataframe格式直接画直方图)
函数说明: 1. .hist 对于Dataframe格式的数据,我们可以使用.hist直接画出直方图 对于一些像年龄和工资一样的连续数据,我们可以对其进行分段标记处理,使得这些连续的数据变成离散化 就 ...
- es6 初级之---const 和 默认参数
1. const 的定义: 1.1 常量定义的时候要赋值,不赋值是会报错的: <!DOCTYPE html> <html lang="en"> <he ...
- vue:监听数据
1:普通的监听: data () { return { watchNum:1, } }, watch: { watchNum(newValue, oldValue) { console.log(old ...
- Cookie-base 认证实现(学习笔记)
第一步 新建一个ASP.NET core 默认项目 新建 AdminController public class AdminController : Controller { [Authorize] ...
- 浅谈MySQL事务及隔离级别
目录 1.什么是事务 2.事务的ACID属性 2-1.原子性(Atomicity) 2-2.一致性(Consistency) 2-3.隔离性(Isolation) 2-4.持久性(Durability ...
- [PHP]快速实现:将二维数组转为一维数组
如何将下面的二维数组转为一维数组. $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'na ...
- mysql 回顾
主键可以是一个或者是多个列,但所有的列(或者是列的组合)必须是唯一的,非空的 关键字distinct 可以去重,实现该效果还可以使用group by limit 默认从 0 开始,limit 5 其实 ...
- (转)关闭win10的Skype
https://blog.csdn.net/qq_38285661/article/details/86663849 使用win10的小伙伴们,有没有发现一个不用的功能Skype,假如你想卸载又怕卸不 ...