c语言之要点-泛篇
1.goto goto由goto和标签名组成,
1 1 if(....)
2 2 {
3 3 .....
4 4 goto part2;
5 5 }
6 6 part2: printf("......");//可以直接由goto位置跳动到 该位置
2.递归:函数自己调用自己,类似死循环原理,但实际上有条件约束终究会结束的,但是有些函数会建立形参,耗用内存,再递归过程中会不断加大内存耗损,请注意。
1 #include <stdio.h>
2 void up_and_down(int);
3
4 int main(void)
5 {
6 up_and_down(1);
7 return 0;
8 }
9
10 void up_and_down(int n)
11 {
12 printf("LEVEL %d : n location %p\n",n,&n);//#1
13 if(n<4)
14 up_and_down(n+1);
15 printf("LEVEL %d: n location %p\n",n,&n);//#2
16 }a:尾递归:
递归完毕,紧接着调用return
3.寄存器变量 register ,这种变量说明函数入口只有一个,也就是只有一个函数在同一时刻访问,期间没有别的函数调用,修改,编译器就可以优化 替代相关的变量,并不会从内存中反复读取。
4.static 修饰的变量在内存中不会被注销,等效于全局变量,但是他的作用于被限定在一个块中,它修饰的函数也只能在本页代码中调用。
5.变量的位置 全局变量和静态变量在内存的一个位置,初始化的全局变量和初始化的静态在一个位置,未初始化的全局和未初始化的静态在相邻位置
6.分配内存 malloc 和 free,由于c语言想要实现动态特性来解决资源浪费的某些情况。
1 double * ptd;
2 ptd = (double * )malloc(30*sizeof(double));
3 //malloc返回一个指向数据类型的指针,一般要使用强制数据转化,malloc 参数一般是你需要开辟空间的大小,比如你要开辟多少个元素。返回的指针可以是各种类型,常用于结构体,链表,队列,数组等等free来响应的释放内存,这个很重要,不然内存会泄露
calloc也可以用来分配内存
1 long * newmem;
2 newmem = (long *) calloc(100,sizeof(long));使用两个参数 第一个参数表示数量 ,第二个表示单个占用空间的大小
处理变长数组
1 int n=5;
2 int m=6;
3 int ar2[n][m];//nxmµÄ±ä³¤Êý×é
4 int (* p2)[6];//c99֮ǰµÄÊý×é
5 int (* p3)[m];//ÒªÇóÖ§³Ö±ä³¤Êý×é¡
6 p2 = (int (*) [6])malloc(n*6*sizeof(int));//nx6 Êý×é
7 p3 = (int (*) [m])malloc(n*6*sizeof(int));//nxm Êý×é(ÒªÇóÖ§³Ö±ä³¤Êý×é)
8 ar1[1][2]=p2[1][2]=12;但是malloc的操作会造成大量的内存碎片
7.ANSI C类型限定符
const volatile restrict 三种类型限定符
const修订的变量不会被改变,编译器会抓到你要修改,并报错,const修订指针,有的指针不能改变,有的指针指向的数据不能改变。
const float * pf;//pf指向一个float类型的const值 指向的值不能改变(在嵌入式中,该部分数值存放在flash中),但是pf可以指向其他地方
float * const pt;// pt是一个const指针 该指针只能指向一个位置,但是指向的值可以改变
const float * const ptr;//完全被固定,该指针不能改变,指向的数据也不能改变。
volatile 就是防止编译器优化,一般一个变量在程序中多次出现,编译器很容易将他放置到寄存器中进行优化,提升运算速度。 告诉编译器这个变量是经常改变的(dma数组 有多个线程改变数据),请一直从内存中读取。
restrict
1 int ar[10];
2 int * restrict restar = (int * )malloc(10*sizeof(int));
3 int * par = ar;
4 for(n=0;n<10;n++)
5 {
6 par[n]+=5;
7 restar[n]+=5;
8 ar[n]*=2;
9 par[n]+=3;
10 restar[n]+=3;
11 }
12 //restar[n]+=8 //可以替换 par[n]+=8;//进行数据替换 将会出错 中间改变了
13_Atomic (c11) 适用于多线程的原子变量
_Atomic int hogs;//原子变量 别的进程不能访问
c语言之要点-泛篇的更多相关文章
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- linux shell语言编程规范安全篇之通用原则【转】
shell语言编程规范安全篇是针对bash语言编程中的数据校验.加密与解密.脚本执行.目录&文件操作等方面,描述可能导致安全漏洞或风险的常见编码错误.该规范基于业界最佳实践,并总结了公司内部的 ...
- Xamarin XAML语言教程基础语法篇大学霸
Xamarin XAML语言教程基础语法篇大学霸 前 言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...
- Scala语言笔记 - 第三篇(容器方法篇)
Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...
- 通过实战理解C语言精要——函数篇
前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...
- 《C语言程序设计》指针篇<一>
指针 指针是C语言的精华,同时也是其中的难点和重点,我在近日对这一部分内容进行了重新的研读,把其中的一些例子自己重新编写和理解了一遍.此篇博客的内容即是我自己对此书例子的一些理解和总结. 一.大问题: ...
- 最具有性价比的语言javascript之介绍篇
虽然最近几年javascript很火.但很多程序员对javascript重视程度不够,所以对javascript的高级应用不甚了解.认为javascript仅仅只是一门脚本语言,作用就是表单验证,网页 ...
- (八)羽夏看C语言——C番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- (九)羽夏看C语言——C++番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
随机推荐
- 12C -- ORA-65048 ORA-65048
创建common user的时候报错: $ sqlplus '/as sysdba' SQL*Plus: Release 12.2.0.1.0 Production on Tue Apr 18 11: ...
- [转]Greenplum 执行计划之广播与重分布
关联数据在不同节点上,对于普通关系型数据库来说,是无法进行连接的.关联的数据需要通过网络流入到一个节点中进行计算,这样就需要发生数据迁移.数据迁移有广播和重分布两种.在GP中,每一个广播或重分布会产生 ...
- GitHub网站操作
1.建立新的仓库 2.添加文件 3.新建一个分支 4.删除仓库
- TCP/IP协议理解
TCP/IP协议理解 一. 协议分层 由于ISO标准中的网络模型是个7层模型,但是由于7层模型对于当时的网络厂商来说太过复杂,很多厂家采用了简化的4层模型来实现网络设备,4层模型也就成了事实的网 ...
- packetfence 7.2网络准入部署(一)
packetfence 是一款内网准入软件,刚开始研究的时候也是一脸懵逼,资料少的可怜,前后玩了几个月,中途很多次都想放弃了,填完了很多坑,最后也算是成功了 好了,今天就讲一下packetfence所 ...
- cad巧用插件自定义填充图形
很多同志如果遇到奇葩的填充图案,怎么办,找不到合适的,自己辛苦画了一遍,想把它作为自己的自定义的图案,怎么办呢. 今天老王给你您介绍个好用的插件. 首先在命令行输入命令 ap 弹出加载对话框 打开窗 ...
- [数据]matplotlib总结
这里权当一个matplotlib的用法小结,主要用于记录,以防忘记. 需要安装一下Anaconda,这里推荐清华大学的镜像:https://mirrors.tuna.tsinghua.edu.cn/h ...
- 【转】WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.Dat ...
- 【转】HTML embed标签使用方法和属性详解
一.基本语法 代码如下: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持.url为音 ...
- 追踪go语言(golang)的新版本新特性【摘抄】
Go 2.0 新特性展望:详细 go2.0 会有什么新特性呢?下图是一个老外的调侃,他不希望发生这样的事情(please don't make it happen).我倒是希望其中一些实现,比如泛型和 ...