volatile 关键字
一个定义为volatile的变量会被意想不到的改变,这样编译器就不会假设这个变量的值了,精确的来说就是编译器在用到这个变量的时候必须每次都小心的重新读取这个变量的值,而不是使用保存在寄存器里面的备份;
一个参数既可以是const也可以是volatile,一个经典的例子就是只读状态寄存器,它是volatile,因为它可能会被意想不到的改变,它是const因为程序员不应该试图去改变它;
一个指针可以是volatile尽管这样并不常见,例如一个中断服务子程序修改一个指向buffer的指针的时候;
转换方程:
a + = 表达式; => a = a + (表达式);
逗号运算符
不管你相信与否逗号运算符确实是合法的C运算符,逗号的运算符是将两个或者多个表达式分隔开,这些表达式是自左向右依次的求值整个逗号表达式是最后也是最右边那个表达式的值。
例如:
if( a + 3,b / 2,c >= 0);
其实if条件是否成立仅仅取决于c>=0是否成立,也就是最右边的值才是最终的值;
条件运算符
条件运算符是C语言运算符中唯一的三目运算符,条件运算符的使用方法如下:
表达式1?表达式2:表达式3
条件运算符的优先级非常的低,(仅比赋值运算符和逗号运算符的优先级高),因此作为各个操作数的表达式一般不需要加括号。
如果你爱编程,你就应该爱C语言,如果你爱C语言,你就应该爱指针,如果你爱指针你就应该爱函数指针,指针是C语言中最有魅力也是最有争议的元素,是天使与魔鬼的统一体,,正是由于C语言对指针的灵活支持(至少一个非常重要的原因),C语言几乎是编写系统软件(包括操作系统,编译器等软件)的首选语言。
理解C语言的关键就是理解真正的存储器。

每一个存储单元都有两个属性,一个是存储器里面存放 的内容,二是这个存储单元的地址(事实上,地址也是数据,只是地址的特殊性)。


  1. malloc(0)在我的系统里是可以正常返回一个非NULL值的。

  2. malloc(0)申请的空间到底有多大不是用strlen或者sizeof来看的,而是通过malloc_usable_size这个函数来看的。—当然这个函数并不能完全正确的反映出申请内存的范围。

  3. malloc(0)申请的空间长度不是0,在我的系统里它是12,也就是你使用malloc申请内存空间的话,正常情况下系统会返回给你一个至少12B的空间。这个可以从malloc(0)和malloc(5)的返回值都是12,而malloc(20)的返回值是20得到。

  4. malloc(0)申请的空间是可以被使用的。

  5. malloc只有申请失败的时候才会返回NULL剩下的malloc(0)等下雨12的全部申请的是12B,可能不同的系统申请的大小是不一样。


指针是变量的地址,在C语言中关于指针的运算有以下几种,:

1.同类型的指针可以做加减运算。

2.同类型的指针可以比较大小

3.除控类型指针(void *)之外,指针可以加上一个整数或者减去一个整数。

4.除空类型指针外(void *),指针是可以进行自增(++)自减(–)的运算。


char *p,*q;
p = "Hello!";
q = p;
q[0] = 'h';

在ANSI C标准中字符串常量是存储在 string literal pool 中的,并且ANSI C禁止对string literal pool 进行修改,因为对于上面的例子中”Hello!”,编译器或者连接器会将这个常量串映射到ROM等只读区内存区,因此如果对这个区域进行写操作的话很可能会引起总线的错误对于ARM而言就可能是Data Abort)。
然而代码修改成:

char *q;
char *p = "Hello!";
q = p;
q[0] = 'h';

就是正确的了;

高级C语言教程-关键字和运算符相关推荐

  1. c语言关键字和运算符,C语言关键字和运算符.doc

    C语言一共有32个关键字,如下所述: auto :声明自动变量 short :声明短整型变量或函数 int: 声明整型变量或函数long :声明长整型变量或函数 float:声明浮点型变量或函数 do ...

  2. GCC总结、C语言关键字和运算符

    文章目录 GCC选项总结 关键字 运算符 GCC选项总结 #查看gcc版本 gcc -v #小写的vgcc -o 输出的文件名 输入文件名GCC编译的四个阶段: gcc -E #预处理生产.i文件 g ...

  3. 高级C语言教程-编译链接调试

    编译器 一般认为所谓的编译就是将便于程序员编写.阅读.维护的高级计算机语言翻译为计算机能够解读.运行的低级机器语言的特定程序.编译器将源代码作为输入翻译生成使用目标语言的等价程序,事实上一般的C语言程 ...

  4. 高级C语言教程-指针和存储

    讲一讲C语言中的值传递引用还有地址传递: 以下面的一段代码为例: void GetMemory(char *p) {p = (char *) malloc(100); } void Test(void ...

  5. 高级C语言教程-存储器和指针

    ATPCS即ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称 回调函数 通常情况下函数的调用是用户的函数调用操作系统的函数,上层的函数调用底层 ...

  6. 高级C语言教程-作用域

    C语言中一共有4中作用域:代码块作用域.文件作用域.函数作用域和原型作用域. 1.代码块的作用域,位域一对大括号中的所有语句构成一个代码块(Block)任何在代码块开始声明的标识符都具有代码块作用域, ...

  7. 高级C语言教程-sscanf()函数使用方式

    C语言支持可变参数的函数,这需要采用 #include <stdio.h>int main( void ) {char tokenstring[] = "15 12 14...& ...

  8. Python教程——变量和运算符

    一.指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备.其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理 ...

  9. 高级C语言教程编码风格

    列表内容 每个C文件包含额头文件的顺序应该遵循先底层后上层的原则, ASIC-ii头文件 底层库头文件 操作系统头文件 应用程序头文件 2.利用括号来表示运算的优先顺序 每行语句单独一行,不要使用过长 ...

最新文章

  1. ISME:广东土壤所孙蔚旻组-脱硫弧菌介导的硫氧化锑还原耦合作用
  2. sentinel使用(结合OpenFeign)
  3. 微信小程序 app.json 详细介绍
  4. 【Cubase】Cubase 量化设置 ( 量化预置 | 长度量化 | 快捷键设置 | 量化开头 | 量化 MIDI 事件结尾 | 量化 MIDI 事件长度 )
  5. Linux调优方案,sysctl.conf的设置
  6. 深入解析C++编程中的静态成员函数
  7. 递归时间/空间复杂度的分析(斐波那契为例)
  8. 招募 | 贪心科技招募CV、语音分析、联邦学习课程讲师(在线+兼职)
  9. 元空间和直接内存_JVM探秘:Java内存区域
  10. WTM系列视频教程:CodeFirst
  11. 转载:HTML5及移动端BUG
  12. 齐岳供应TCPP-Fe(3+)四羧基苯基卟啉铁;TCPP-Zn(2+)四羧基苯基卟啉锌
  13. 二进制、八进制、十进制以及十六进制
  14. google 学术一直 sorry 怎么办?
  15. 如何安装UOS操作系统
  16. 【Web开发】登录注册功能实现
  17. 物联网设备数据流转之数据如何导出:Excel文件
  18. HTML+CSS系列学习
  19. AIX操作系统维护详解
  20. 商品分类列表功能实现php,【图片】B2B2C系统如何实现商品分类功能【thinkphp吧】_百度贴吧...

热门文章

  1. 图像分割中mask的保存
  2. JSP简单练习-省略显示长字符串
  3. spring AspectJ的Execution详解
  4. MyCAT+MySQL 搭建高可用企业级数据库集群
  5. Windows 10安装pip方法
  6. aix用户登录次数受限问题(3004-300 输入了无效的登录名或password)
  7. 从零学React Native之07View
  8. 【转】获取命名空间、类名、方法名
  9. UpdatePanel里使用FileUpload
  10. SCRUM 敏捷开发 基础及失败成功案例分析