摘要: 一般来说,基本类型(整型、字符型等)常量会在编译阶段被编译成立即数,占的是代码段的内存。(代码段是只读的,而且不允程序员获取代码段的地址,所以在c++中,尽量不为const分配数据段的内存,但是一旦取cosnt的地址,就不得不分配了,但是读const的时候,依然是从代码段读取那个立即数) 而字符串常阅读全文
posted @ 2017-09-15 09:40 青儿哥哥 阅读(8) 评论(0) 编辑
摘要: C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组。 最近写程序的时候无意间发现,gcc中竟然支持下面这种写法: int n = 10; int a[n]; 注意上面的语句是在函数内部写的,也就是n和a阅读全文
posted @ 2017-09-14 14:36 青儿哥哥 阅读(163) 评论(2) 编辑
摘要: C和C++中的名字空间和作用域 C语言中有名字空间这个概念吗? 提到名字空间(或者可能更普遍的叫法,命名空间),很可能先想到的是C++,甚至是C#。C中没有名字空间吧?一开始我也是这样认为的,直到我看了C primer plus这本书,才直到C语言中其实也有名字空间的概念!而为什么我们更熟悉C++中阅读全文
posted @ 2017-09-12 21:54 青儿哥哥 阅读(167) 评论(0) 编辑
摘要: C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了。 unsigned int和int进行运算 直接看例子来说明问题吧 输出结果为: 这是因为a和b进行比较的阅读全文
posted @ 2017-09-11 22:23 青儿哥哥 阅读(104) 评论(2) 编辑
摘要: 字符编码知识简介和iconv函数的简单使用 字符编码知识简介 我们知道,在计算机的世界其实只有0和1。期初计算机主要用于科学计算,而我们知道一个数,除了用我们常用对10进制表示,也可以用2进制表示,所以只有0和1就可以进行科学计算,但是为了便于计算,大神们还是向计算机中引入的编码,比如通常我们用补码阅读全文
posted @ 2017-09-07 20:03 青儿哥哥 阅读(132) 评论(0) 编辑
摘要: C和C++混合编程之 extern “C”的使用 首先要明白: C++号称是C语言的超集,也确实,从语言的基本语法上,C++是包含所有C语言的语法的,而且C++为了兼容C,连C语言的标准库也被纳入到C++的标准库中,比如在C++中我们仍然可以使用<stdio.h>,它就是C++标准库的一部分(注意最阅读全文
posted @ 2017-09-05 15:30 青儿哥哥 阅读(229) 评论(0) 编辑
摘要: 选择排序之简单选择排序和堆排序 选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式阅读全文
posted @ 2017-08-25 16:35 青儿哥哥 阅读(20) 评论(0) 编辑
摘要: 异或有两个很重要的性质: 1、 A^A = 0; 2、A^0 = A; 利用这两个性质,我们就能够利用异或进行两个值的交换。 代码如下:阅读全文
posted @ 2017-08-25 13:33 青儿哥哥 阅读(12) 评论(0) 编辑
摘要: C语言中的按位移动及其简单应用 在C语言中按位左移用”<<”表示,按位右移用”>>”表示。 按位左移和按位右移运算经常被用来替换乘二和除二运算,但是要注意,这两者之间并不完全等价。下面就分析一下: 首先明确,按位移动分为逻辑移动和算术移动,具体就是:逻辑左移、算术左移;逻辑右移、算术右移。 算术左移阅读全文
posted @ 2017-08-25 11:10 青儿哥哥 阅读(11) 评论(0) 编辑
摘要: 插入排序算法 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。 直接插入排序 直接插入排序的排序思路阅读全文
posted @ 2017-08-21 20:54 青儿哥哥 阅读(173) 评论(0) 编辑