1.标识符  2.寄存器变量 3.全局变量 4.分配内存与初始化 5.变量定义与声明 6.作用域规则 跳转语句 7.&与&&,|和||的意义与区别 8.如何选择switch case和if else语句

  9.字符问题 10.printf输出格式 11.|和% 求余与求商 12.转义字符 13.函数地址 14.溢出以及短路求值 15.有符号数和无符号数的比较

  标识符

    标识符由字母数字下划线组成,其中必须以字母或下划线开头,标识符的长度没有限制,但是对大小写字母很敏感,用户自定义的标识符中不能连续出现两个下划线,也不能以下划线紧连大写字母开头,

    此外定义在函数体外的标识符不能以下划线开头,标识符分为关键字,预定义标识符,用户标识符,关键字不可作为用户标识符,main,define,scanf,printf等都不是关键字

    所谓参数标识符即是变量名,在函数声明时是可选的,在定义时是必要的

  寄存器变量

    变量一般为局部变量,不能为全局变量或静态变量,因为寄存器变量属于动态存储方式,区别于静态,数据区有全局数据区(静态数据区),堆区,栈区,文字常量区,程序代码区

  全局变量

   生命周期与作用域:生命周期是整个程序结束,因为其存储在全局变量区(静态数据区),在程序开始的时候即被初始化直到程序结束;一个全局变量如果没有被static修饰,那么可以在

    其他源文件中用extern声明,那么其作用域即可延伸到其他地方

  分配内存与初始化

   分配内存:即可以算是创建了该变量,初始化操作是让它拥有一个有意义的值

      静态变量:和全局变量一样在进入main函数之前就已经分配内存(即是在编译期间分配的内存)

      普通变量:即auto变量,创建并分配内存即是程序第一次运行到此处的时候

   初始化:是让它拥有一个有意义的值

      C要求在程序块的起始处定义所有的变量,以便在编译器创建一个块时,能给所有这些变量分配空间

      静态变量:是在第一次调用该变量所在函数的时候

      普通变量:程序第一次运行到这里即会分配内存并初始化

  变量定义与声明

   定义:变量在定义时被分配内存,并且可以指定一个初始化的值

      int *x,y;    //定义指针x,int型变量y,因为*标识符结合而不是与类型结合,所以建议尽量一行定义一个指针以免出错

      int x = y = 10;  //错误的,定义时不可连续赋值,定义完成后可以连续赋值

   声明:声明如extern int a;  //这只是声明,不会分配内存

  作用域规则

    变量在哪里创建,既将在哪里销毁

   局部变量:局部变量的作用域由变量所在的最近一对括号确定,因此在一个函数中可以定义多个重名但作用域不同的局部变量

    注意若是在switch case 语句中定义局部变量则需注意在一个case中定义初始化一个变量后会不会有跳过这个case的初始化而直接在其他case中使用的情况,使用一个未初始化的变量是有问题的

   全局变量:最好在cpp中定义,在头文件中定义时假如头文件被包含也许会出现未知的问题

  跳转语句

    中断当前的执行过程,C++提供了四种跳转语句 break,continue,goto,return;

   break:负责终止离它最近的while,do while,for,switch语句,并从这些语句之后的第一条语句开始继续执行,即break之后的语句得不到执行,

    break语句只能出现在迭代语句或switch语句的内部,break语句的作用范围仅限于最近的循环或者switch

   continue:终止最近的循环中的当前迭代并立即开始下一轮迭代,对于while和do while来说是继续判断条件的值,对于for来说,是继续执行for循环中的expression,即为跳出本次循环,

    continue之后的语句也得不到执行,continue语句只能出现在for,while,do while等循环的内部,或者嵌套在此类循环的语句或块的内部

   goto:是从goto语句无条件的跳转到函数的另一条语句  //不要在程序中使用goto语句,这会使得程序既难理解又难修改

    goto的语法:goto label; label是一个标示符,用于标识一条语句,如:end:return;这就是一句带标签语句,可以作为goto的目标,goto的作用域是一个函数内的,且不能跳过一个变量的初始化语句

   return:结束当前函数

  &与&&,|和||的意义与区别

    |和&表示位运算,针对数值进行的运算,例如:3|2二进制表示即为11|10(省略前面的许多0),结果即是3,其结果仍然为数值

    ||和&&表示逻辑运算,||表示或,&&表示与,其结果是逻辑值true或false

  如何选择switch case和if else语句

    总结:当分支数为3时,switch和if 语句效率相当,当大于3时选用switch语句,反之if语句

    特点:在汇编层switch语句是查找表,if语句是跳转

    拓展:在选择分支较多时,选用switch语句会提高程序的效率,但switch只能处理字符或者数字类型的变量;if 结构更加灵活,应用范围更加广泛;注意switch语句,一但符合某个case,

      那么程序从case后的冒号开始执行,直到遇到break,如果中间有创建局部变量,那么需要给case加大括号以便给局部变量限定作用范围,

  字符问题

    '0' = '48','a' = '97','A' = 65;  '0'是字符,占一个字节,'1'是字符串占两个字节,另一个是结束符,ascii码,一般机器上,一个英文字母(不分大小写),占一个字节的空间,一个中文汉字占两个字节

    bit是位,byte是字节,一字节等于8位,

  printf输出格式

    %格式,%d:整数,%c为字符,要看对应的ascii码

    (1) %-3d:左对齐,占三位

    (2) printf("%2d",123):原样输出123,printf("%5d",123);左边补两个空格123

    (3) printf("%10f",1.25);小数要求补足六位的,没有六位的补0,结果是1.250000(实际上是0001.250000,要求是这样的,没有原因)

    (4) printf("%5.3f",125);小数三位,整个五位,结果为1.250(小数点算一位)

    (5) printf("%3.1f",1.25);小数一位,整个三位,结果为1.3(要进行四舍五入)

  |和%  求余与求商

    /:两边可以有小数,若有小数则结果也为小数,如果两边都是整型,结果也是整型, 4.5/1.5=3.0; 4.5/3=1.5; 8/4=2

    %:两边要求是整数,且是取余 8%5=3;

    逗号表达式:z= (2,3,4);此时值为4, z= 2,3,4此时值为2

  转义字符

    分为一般转义字符,八进制转义字符,十六进制转义字符,

    一般转义字符:\0,\n,\',\",\\

    八进制转义字符:'\141'是合法的,前导的0是不能写的

    十六进制转义字符:'\x6d'是合法的,前导的0不能写,并且x是小写

  函数地址

    一但函数被编译并载入计算机中执行,它就会占用一块内存,这块内存有一个地址,因此函数也有地址,可以通过指针使用函数地址,就像可以使用变量的地址一样

    void(*funcPtr());之所以用()把指针包起来,因为如果没有这个小括号,那么就像是一个函数声明式了,使用先右后左的原则去推断,意为:funcPtr是一个指针,它指向一个不带参数

    并返回void的函数,理解时从中间开始:funcPtr是一个;向右走,(没有东西,被右括号拦住了);向左走发现一个*(...指针指向一个...);向右走发现一个空参数表(...没有带参数的函数);

    向左走发现一个void(funcPtr是一个指针,指向一个不带参数并返回一个void的函数)

  溢出以及短路求值

    溢出:指的是当一个类型的值超出了它所限定的最大值之后,溢出的结果是不可预知的,很多系统都不会报溢出错误

    短路求值:也即立即判死原则,在一个复杂的逻辑运算表达式中,一但某个运算对象可以确定整个表达式的值,那么之后的一些运算项就不会再继续计算,而是结束整个表达式

   sizeof()的作用,求大小

    对char或者类型为char的表达式执行sizeof()运算,结果得1

    对引用类型执行sizeof()运算得到被引用对象所占空间大小,即此原对象占多少即为多少

    对指针执行sizeof()运算得到指针本身所占空间大小

    对解引用指针执行sizeof()运算得到指针指向的对象所占空间的大小,指针不需要有效

    对数组执行sizeof()运算得到的是整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和,sizeof不会把数组当成指针来处理

  有符号数和无符号数

    有符号数和无符号数进行比较:首先把有符号数转换成无符号数再进行比较,输出比较结果时注意输出格式

    例子:int a = -1;unsigned int b = 1; printf ("%d",a>b);  //输出1

    因为无符号数与有符号数比较时,要将有符号数转化为无符号数(若是负数则取绝对值原码的补码),再来比较  

    a转化为无符号数之后就是0xFFFFFFFF即65535,

    char a = -1;  因为是ascii码,转换一下

    unsigned char b = 1;

    printf("%d",a>b);  //输出0

    这是因为两者被转为int了,a转化为int就表示-1,b转化为int就是1,前者小于后者

C学习笔记 知识集锦(一)的更多相关文章

  1. C++学习笔记 知识集锦(二)

    1. 命名规范 2. 代码格式 3. QString的判断 4. 对象的判空 5. 隐式接口&显式接口 6. vector&string 7. static 8. const 9. v ...

  2. C学习笔记 知识集锦(二)

     1. 数组和指针 2. 字符串赋值 3. memset&memcpy 4. 机器数和真值,原码,反码和补码 5. 文件指针和文件描述符 6. 内存泄露和内存损坏 7. 什么是不可移植的程序 ...

  3. C++学习笔记 知识集锦(一)

    1.内存管理的开销 2.函数调用框架 3.类为什么要定义在头文件 4.C++的组合 5.在类的外部定义成员函数 6.bool类型为什么可以当做int类型 7.无符号保留原则 8.C++类型检查 9.何 ...

  4. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  5. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  6. CLR via C#学习笔记----知识总概括

    第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问C ...

  7. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  8. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  9. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

随机推荐

  1. EventBus 二

    前一篇简单演示了EventBus的onEventMainThread()函数的接收,其实EventBus还有另外有个不同的函数,他们分别是: 1.onEvent2.onEventMainThread3 ...

  2. 转载:Tomcat的JVM设置和连接数设置

    Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m Linux环境下修 ...

  3. 【NOI2016】优秀的拆分 题解(95分)

    题目大意: 求一个字符串中形如AABB的子串个数. 思路: 用哈希做到O(1)判断字符串是否相同,O($n^2$)预处理,ans[i]为开头位置为i的形如AA的子串个数.再用O($n^2$)枚举出AA ...

  4. CentOS7 编译安装 Nginx (实测 笔记 Centos 7.0 + nginx 1.6.2)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  5. Javascript初学篇章_4(循环与函数)

    七.循环语句 1.While 语法: while (exp){ //statements; } 说明: while (变量<=结束值){ 需执行的代码 } 例: var i=0; while(i ...

  6. linux系统安装(下)

    Grub引导装载程序 目录简单介绍 /dev存放了设备文件  /dev/sad硬盘文件  root/install.log安装日志  root/kickstart包含这次安装信息,下次若需要相同安装可 ...

  7. LruCache为GridView异步加载大量网络图片

    MainActivity如下: import android.os.Bundle; import android.widget.GridView; import android.app.Activit ...

  8. HBuilder从下载到使用

    听别人谈论这货,于是决定长长见识,见见世面,便屁颠屁颠到网上下一个,满怀好奇的研究了一下.对用过eclipse这款软件的人来说,上手非常容易. ☆ 准备工作 ① 确认自己的电脑连接网络,能下载东西. ...

  9. 简单的行为控制管理方法,自动登录,session定时验证码过期

    代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 比如 //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分 ...

  10. js 中将日期转换为星期需要注意的

    new Date(strDate); 中strDate需要是1998/10/30这样的格式,如果是1998-10-30的格式,不一定旧版本的web能兼容