C和指针
1.#if ... #endif 之间的程序段就可以有效地从程序中去除,不管中间有没有注释
2.环境:两种环境不比位于同一台机器上
1.翻译环境:源代码被转换为可执行的机器指令
2.执行环境:用于实际执行代码
3.三字母词
4.注释会被预处理器拿掉,取而代之的是一个空格
5.printf("\40");输出空格 \40为八进制32
6.把一个大型程序放入一个单一的源文件中有什么优点,有什么缺点?
优点:链接时间会减少
缺点:(1)对文件的一点改动,都需要重新编译这个大文件;这时比分成几个小文件后,只重新编译有改动的文件的编译时间长。
(2)不易阅读。
(3)不易维护
7.长整型至少应该和整型一样长,整型至少应该和短整型一样长
8.在声明变量时,如果声明已经至少有了一个其他的说明符,关键字int可以省略
unsigned short int 与 unsigned short 一样
9.隐式声明:1.函数如果不显示地声明返回值的类型,它就默认返回整型(不建议)
10.原型作用域:只适用于函数原型中声明的参数名
11.函数作用域:只适用于标签,标签用于goto
12.如果摸个声明在正常情况下具有external链接属性,在它面前加上static关键字之后可以是它的连接属性变为internal。static只对缺省属性为external的声明才有效
13.extern 用于某标示符的第二次或以后的声明时,它并不会更改由第一次声明所指定的链接属性
14.凡是在任何代码块之外声明的变量总是存储于静态内存中,静态变量在程序运行之前创建
15.函数形式参数不能声明为静态的,因为实参总是在堆栈中传递给函数,用于支持递归
16.static作用域函数定义或代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。当用于代码块内部的变量的声明时,用于修改变量的存储类型,由自动变量修改为静态变量
17.函数---代码总是存储在静态内存中
18.switch(expression) expression必须是整型值
19.C不具备布尔类型,C不具备任何输入输出语句,I/O是通过调用库函数实现的;C也不具备任何异常处理语句,也是通过调用库函数完成的
20.右移位操作:逻辑移位(JAVA>>>)、算数移位(负数,取决于编译器JAVA>>)
21.while( (ch = getchar()) != EOF) ch为int型!!! 若为char型,将导致getchar返回值截断,而EOF为int型
22.判断表达式并不需要对表达式求值,所以sizeof(a=b+1)并没有向a赋任何值
23.++ -- 这些操作符的结果不是被他们所修改的变量,而是变量值的拷贝
++a = 10; 错误,++1的结果是a值的拷贝,不是变量本身,无法向一个值进行赋值
24.expression1, expression2, expression3 这些表达式自左向右进行求值,整个逗号表达式的值就是最后那个表达式的值
25.指针用->, 结构体本身用.
26.使用右值的地方可以使用左值,但需要左值的地方不能使用右值
27.声明一个指向整型的指针都不会“创建”用于存储整型值的内存空间
28.只有当两个指针指向同一个数组中的元素时,才允许从一个指针减去另一个指针,值为指针在内存中的距离(以数组元素的长度为单位)
29.标准允许指向数组的指针域指向数组最后一个元素后面的那个内存位置的指针进行比较,但不允许与指向数组第一个元素之前的那个内存位置的指针进行比较
30.C预处理器在源代码编译之前对其进行一些文本性质的操作,主要包括:删除注释、插入被#include指令包含的文件的内容、定义,替换由#define指令定义的符号,确定代码的部分内容是否应该根据一些条件编译指令进行编译
31.宏 #define name(parameter-list) stuff (必须与name紧邻
32.宏参数和#define定义可以包含其他#define定义的符号,但,宏不可以出现递归
33.宏定义技巧:1.邻近字符串自动连接的特性是我们很容易把一个字符串分成几段
2.预处理器把一个宏参数转换为一个字符串: #argument 这种结果被预处理器翻译为“argument” 而 ##把位于两边的符号连接成一个符号
34.函数与宏:使用宏比使用函数在程序的规模和速度方面都更胜一筹
若宏太长,会导致程序的长度大幅增加
宏具有副作用
35.移除宏定义#undef
36.条件编译#if ... #end 如果条件值为非零值则正常编译否则预处理器就安静地删除它们 #if ... #elif ... #else ... #endif
37.编译器至少包含8层的头文件嵌套 消除重复包含使用#ifdef #endif
38.#error ... 允许你生产错误信息
39.当字符串常量出现在表达式中时它的值是个指针常量
C和指针的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Marshal.Copy将指针拷贝给数组
lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...
- C++智能指针
引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- 智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...
随机推荐
- 树莓派开发系列教程2--树莓派3B介绍及系统烧写、基本配置
注意:树莓派系列的3篇文章里面的图片因为博客转移过程丢失了,非常抱歉 前言 树莓派系列里涉及到需要额外电脑来协助处理的部分(如烧写系统,远程访问等等),统一在运行着Ubuntu15系统的mac air ...
- centos如何设置定时任务
1.crontab -e 打开任务列表,输入i开始编写面之后按esc退出编写默写,:wq保存退出即可. 2.关于时间格式的定义,,请使用下面的网站 https://crontab.guru/#00_0 ...
- spring中的任务调度Quartz
Spring 整合 Quartz 任务调度 主要有两种方式. Quartz的官网:http://www.quartz-scheduler.org/ 这两种只是一些配置文件简单配置就OK了,但是根本无法 ...
- mybatis注解使用
spring整合mybatis时,要使用mybatis的注解,需要spring-config.xml文件中添加下述配置: <!--下述配置指明了我们的Mapper,即Dao,在相应的包里也就可以 ...
- setsid
说明:当进程是会话的领头进程时setsid()调用失败并返回(-1).setsid()调用成功后,返回新的会话的ID,调用setsid函数的进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离 ...
- intellij idea 远程tomcat 调试
由于在服务器上远程调试风险较高,所以万不得已的情况下 不要这样做.可以本地调试好 再上传到服务器上. 1.关闭防火墙 启动Firewalld,及开机自启. # systemctl start fir ...
- Ecshop二次开发修改
所有的错误,根据下面这个帖子修改 http://bg.artuion.com/328.html 修改错误: 第300行 原有内容: //return preg_replace("/{([^\ ...
- 我所遇到的C++连接问题汇总
http://blog.sina.com.cn/s/blog_7caa399301017k1e.html 1:无法打开kernel32.lib 针对不同版本的VS,lib库所在的地方都不一样,所以首先 ...
- C++的黑科技(深入探索C++对象模型)
周二面了腾讯,之前只投了TST内推,貌似就是TST面试了 其中有一个问题,“如何产生一个不能被继承的类”,这道题我反反复复只想到,将父类的构造函数私有,让子类不能调用,最后归结出一个单例模式,但面试官 ...
- 高屋建瓴之WebMail攻与防
0x01:前言 随着互联网的快速发展,我们的生活与互联网的联系愈加的紧密.各种快捷方便的信息化通信工具渐渐取代了传统的通信方式.微博.QQ.MSN.微信.陌陌, …这样的社交软件和平台已经成为了我们生 ...