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++番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
随机推荐
- 阿里云的免费型DV SSL证书
阿里云提供的免费型DV SSL. 证书的说明: [公告]免费新根证书,切入DigiCert PKI体系,兼容性如下操作系统版本IOS 5.0+.Android 2.3.3+.JRE 1.6.5+.WI ...
- CoffeeScript简介 <二>
集合与迭代 .. 与 ... 先看例子: arr = ["a1", "a2", "a3", "a4", "a5 ...
- android开发之代码混淆
在${user.home}/project.properties文件中设置proguard.config属性 # To enable ProGuard to shrink and obfuscate ...
- Atitti mybatis的单元测试attilax总结
Atitti mybatis的单元测试attilax总结 版本mybatis 3.2.4 /palmWin/src/main/java/com/attilax/dao/mybatisTest.java ...
- 微信小程序开发填坑
1.模拟器和真机的差异 在开发的过程中,在模拟器上表现得好好的,在真机上却出问题的例子数不胜数.譬如动画的使用,cover-view上面使用定位,在模拟器好好的,在真机却错乱等等等等.造成这些错乱主要 ...
- Java知多少(30)多态和动态绑定
在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请大家先看一段代码: public class Demo { public static void main(String[] ar ...
- rqalpha探究 2 接入mod
程序的目的是尽可能用mod扩展功能,所以接下来需要接入mod模块
- Ubuntu 实践
Ubuntu 安装中文支持 开始装的是Ubuntu Server,后来需要某些图形工具,所以装了个Gnome,没想到无论如何都显示不了中文,按照网上的方法试了一堆,装了Synaptic,KDE和GNO ...
- 超简单Windows安装Scrapy (仅需一步)
网上很多关于windows安装Scrapy的教程都非常的繁琐,请看我给大家分享的教程,非常简单 一步完成. 超简单的安装方法: 下载地址: https://www.continuum.io/downl ...
- 多线程开发之二 NSOperation
效果如下: ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UITableViewControll ...