随笔分类 -  C 语言

C语言基础与深度剖析
摘要:原文:https://blog.csdn.net/guotianqing/article/details/77341657 背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char*类型的参数调用。这个警告很容易避免,但是char*和unsi 阅读全文
posted @ 2019-02-24 21:11 lemaden 阅读(7973) 评论(0) 推荐(0)
摘要:在编写测试程序的过程中,有如下定义: #define UART1_EN (1<<31) 编译后编译器报错: integer operation result is out of range (61-D),经查资料是由于溢出所致,宏定义默认常量是有符号型,当左移31位时,常数就变成负数,编译器就会给出 阅读全文
posted @ 2019-02-14 19:18 lemaden 阅读(603) 评论(0) 推荐(0)
摘要:有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定: const int MaxNum = 100; //班级的最大人数 const int MaxNum = 阅读全文
posted @ 2019-01-14 21:25 lemaden 阅读(351) 评论(0) 推荐(0)
摘要:C++中static的作用 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量 阅读全文
posted @ 2019-01-07 20:16 lemaden 阅读(274) 评论(0) 推荐(0)
摘要:今天群里一位小伙伴问了一个关于scanf函数的问题: scanf("%d", &n); 这个代码怎么防止输入字母? 因为他下面是判断n是否为质数,所以这里肯定有个判断,不然输入字母后就乱跑了。 我给他提供的办法是: 这段代码,通过判断scanf的返回值为输入值的个数,这样就可以了,这在竞赛题里面经常 阅读全文
posted @ 2018-12-30 20:13 lemaden 阅读(1376) 评论(0) 推荐(0)
摘要:下面的标识符你肯定在工程中看不到,但是在面试题中却非常常见,掌握掌握还是不错的。 嵌入式软件公司对指针的考察非常强,需要深刻的理解。 右左法则 (实在看不懂看这个) -从最里层的圆括号中未定义的标示符看起 -首先往右看,再往左看 - 遇到圆括号或方括号时可以确定部分类型,并调转方向 -重复2, 3步 阅读全文
posted @ 2018-12-29 11:25 lemaden 阅读(395) 评论(0) 推荐(0)
摘要:1、函数类型 C语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定 ★ int add(int i, int j)的类型为int(int, int) C语言中通过typedef为函数类型重命名 ★ typedef type name(parameter list) //na 阅读全文
posted @ 2018-12-29 11:09 lemaden 阅读(477) 评论(0) 推荐(0)
摘要:1、main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? 2、main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函数作为应用程序的开始 操作系统将main函数的返回值作为程序的退出状态 思考: 为什么C编 阅读全文
posted @ 2018-12-29 10:43 lemaden 阅读(1200) 评论(0) 推荐(0)
摘要:继Typedef遇上结构体数组后,我们又产生了新的疑问。 上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html 昨天一位朋友又问我了,说结构体数组遇上typedef我懂了,就是数组拥有三个特性:1.首地址 2.数组的长度 3. 数组的步长(元素类 阅读全文
posted @ 2018-12-24 16:02 lemaden 阅读(3159) 评论(2) 推荐(3)
摘要:一、假定数据是如何存储的 隐藏某些实现逻辑时,我们是想要隐藏绘制子弹的细节。我们是通过使用一个可以调用的函数,而不是直接写出绘制子弹到屏幕上的代码来实现的。这里同样可以使用一个函数来隐藏棋盘存储的细节。不直接访问数组,而是调用一个访问数组的函数。例如,你可以写一个像下面这个getPiece一样的函数 阅读全文
posted @ 2018-12-22 22:31 lemaden 阅读(788) 评论(0) 推荐(0)
摘要:C++较之C语言强大的功能之一是,C++编译器自带了大量的可复用代码库,我们称为标准模板库(standard template library),STL。标准模板库是一套常用的数据结构的集合,包括链表和一些基于二叉树的数据结构。这些数据结构允许你在创建时指定它们的数据类型,所以可以使用它们来存储任何 阅读全文
posted @ 2018-12-21 19:40 lemaden 阅读(474) 评论(0) 推荐(0)
摘要:当写出这样的代码的时候, 实际上有两步操作: 1.分配内存, 2.然后在分配好的内存之上初始化类成员.第二步是有构造函数完成的, 第一步就是new函数的工作.全局的new有六种重载形式, 所以, 刚才的用法, 就是使用new函数的一种重载形式. 如果A这个对象以同样实行重载了new函数的化, 作为成 阅读全文
posted @ 2018-12-20 17:23 lemaden 阅读(8107) 评论(0) 推荐(0)
摘要:C++ 中经常出现使用对象指针,而不是直接使用对象本身的代码,比如下面这个例子: 而不是使用: 要不就是调用对象的方法(比如 testFunc())时不使用这种方式: 我不明白代码为什么要写成这种形式,我能想到的是指针方式是直接访问内存,这么写代码可以提高代码效率以及执行速度,是这样的么? 最佳回复 阅读全文
posted @ 2018-12-20 15:54 lemaden 阅读(663) 评论(0) 推荐(0)
摘要:1.C++程序设计-现代方法 本书非常适合学习了C语言基础,想跨步到C++学习的同学,前20章都是C基础的回顾,简直不要太简单,后面的课后习题花了半个小时做完了,没怎么出错,嗯,我的C语言基础还是可以的,只是没有参与大型的C项目,对业务不够熟悉。后面第22章开始正式进入C++面向对象编程,可还没有怎 阅读全文
posted @ 2018-12-20 15:32 lemaden 阅读(249) 评论(0) 推荐(0)
摘要:一、随机数 以前学C语言的时候感觉随机数没啥用的,现在想想是自己无知啦,在帮人做一个项目的时候发现随机数还是相当有用的,我们可以利用随机数来生成大量的测试数据。 有两种方法可以让你的程序每次运行结果不同: 1.让用户输入不同的数据(或者从文件中读取不同的数据);2.对用户输入的相同数据采取不同的处理 阅读全文
posted @ 2018-12-20 15:04 lemaden 阅读(717) 评论(0) 推荐(0)
摘要:1、思考 下面这些声明合法吗? int array[5]; int matrix[3][3]; int * pa = array; int * pm = matrix; 问题: array代表数组首元素的地址,那么matrix代表什么? array和&array的地址值相同,但是意义不同,那么它们所 阅读全文
posted @ 2018-12-16 21:30 lemaden 阅读(292) 评论(0) 推荐(0)
摘要:1、典型问题一 下面的程序输出什么为什么? 分析 : snprintf函数本身是可变参数函数,原型如下: int snprintf(char* buffer, int buf_size, const char* fomart, ...) 当函数只有3个参数时,如果第三个参数没有包含格式化信息,函数调 阅读全文
posted @ 2018-12-16 21:13 lemaden 阅读(477) 评论(0) 推荐(0)
摘要:1、字符串的概念 字符串是有序字符的集合 字符串是程序中的基本元素之一 C语言中没有字符串的概念 - C语言中通过特殊的字符数组模拟字符串 - C语言中的字符串是以 '\0' 结尾的字符数组 2、字符数组与字符串 在C语言中,双引号引用的单个或多个字符是一种特殊的字面量 -存储于程序的全局只读存储区 阅读全文
posted @ 2018-12-16 21:04 lemaden 阅读(468) 评论(0) 推荐(0)
摘要:1、变量回顾 程序中的变量只是—段存储空间的别名,那么是不 是必须通过这个别名才能使用这段存储空间? 2、思考 下面的程序输出什么?为什么? 3、*号的意义 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针所指向的内存空间中的值 *相当于一把钥匙,通过这把钥匙打开内存,读取内存 阅读全文
posted @ 2018-12-16 20:21 lemaden 阅读(311) 评论(0) 推荐(0)
摘要:1、C语言中的位运算符 位运算符直接对bit位进行操作,其效率最高。 左移和右移注意点 -左操作数必须为整数类型 char和short被隐式转换为int后进行移位操作 -右操作数的范围必须为: [0, 31] -左移运算符<<将运算数的二进制位左移 规则:高位丢弃,低位补0 -右移运算符>>把运算数 阅读全文
posted @ 2018-12-15 15:27 lemaden 阅读(861) 评论(0) 推荐(0)