随笔分类 - c/c++
摘要:1. 函数执行完成时,里面的局部静态变量所占的内存会被自动释放 首先看个简单的例子程序:
#include <stdio.h> int f(){ int j=20; return j;
} int main(){ int i; i = f(); return 0;
}
可以见到上面 mian函数 调用了f()函数, 而f()里面定义了1个整形变量j.问题是, 如果f()被调用完成和偶, 也就是 i=f(); 这条语句执行完后, f()里面的j所占的内存还存在吗?答案是否. 首先j是1个局部变量, 而且j是1个静态变量, 所以当f() 结束时, f...
阅读全文
摘要:1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int a[5]={1,2,3,4,5}; //合法int b[6]; //合法int c[]; //错误 因为没有指定长度但是下面语句是正确, 它隐形定义了数组的长度, 就是赋值元素的个数int d[] ={4,5,6,7,8,9} //合法 长度为62. 静态数组 什么是静态数组, 其实上面合法定义的数组都是静态数组. 静态数组并不是指数组里面的元素是静态的, 上面的数组都可以修改指定元素的指 而是指数组的元素个数是静态的, 也就是某1个静态数组一旦被定义, 那么在程序运行结束的这段时间里它的长度的都是...
阅读全文
摘要:大伙都知道int类型的 取值范围是 -2147483648 到 2147483647 那为什么不是 -2147483647 到 2147483648 呢? 因为int类型占4个byte, 就是32个bit 了, 而32个二进制位中最高位的那个一位是表示正负的。 所以只有31 个位来表示int 类型本身的大小了。 从 0000000 00000000 00000000 00000000 到 1111111 11111111 11111111 11111111 其中后面31个1 就是 2147483647 啊(2^31 - 1) 所以不算上最高位的符号位的话, 31位 共可以表示 21474...
阅读全文
摘要:写这篇文章时由于没有参考过什么权威资料教材,所以有些观点可能是错误的, 不过我本人都是经过大量调试后才写出来的啦..1. 内存由多个单位为8bit = 1byte的单元组成,每1个单元都配有1个编号,这个就是内存地址。 计算机的主存储器是内存,而不是硬盘,因为cpu只能直接访问内存... 而cpu访问内存是根据内存的编号来访问的,这个编号就是内存地址,cpu获得内存地址就能直接寻址到对应的内存单位。2.指针就是内存地址..它们是同一概念 很多人都讲指针就是指向内存地址的东西, 但是我认为指针就是内存地址..3.指针变量的概念 首先,指针变量是1个变量, 也就是它的值是可以变的。 其次,指针变.
阅读全文
摘要:一,为什么要使用结构体 在语言中,为了表示一些复杂的数据, 而普通的基本变量类型无法满足要求。 例如要定义1个学生类型, 学生有3个属性 sid, name, age 那么在面向对象语言里(例如java),我们可以写1个类 Class Student { int sid; String name; int age; void inputStudent(){ } void showStudent(){ ...
阅读全文
摘要:以前已经都提过了, c语言中,数组名就是1个指向数组第1个元素地址的指针. 如数组char a[] = "bcd"; 数组名a 就是指向数组a[]的第1个元素a[0]的地址 所以*a==a[0]=='b' 当我们定义1个新的指针p,并给它赋值时: p=a; 一般来讲我们认为他们p与a是等价的 因为同样有: *p==p[0]='b' p[i]=a[i] 但是有特殊情况, 要将数组名a看成1个特殊的指针. 例如函数sizeof , 这是取1个对象(变量or常量) 的内存占用空间 举个例子: 定个1个字符数组c: char c[]="ab
阅读全文
摘要:////// 实际上, c中并没有字符串这种数据类型, 也就是说c是没有像java, .net等其他高级语言中常用的String类型. 首先要强调: a. c语言有无字符串? 有! b. c语言有无字符串类型 无! c. c语言字符串是否就是不是字符数组 是! b. c语言字符串和字符数组是同一样东西? 不是! 实际上, c语言中, 字符串是1个特殊的字符数组, 特殊在什么地方? 就是字符数组最后1个元素可以是任意字符, 而字符串(属于字符数组的最后1个元素是'\000', 也就是说, c1.字符类型char 就是c的字符类型定义1个字符变量,跟住赋值.char a;a=
阅读全文
摘要:1. 一维数组 c语言中, 数组占用的空间是一组连续的物理内存空间. 所以对于1维数组来讲,只需要知道数组头1个元素的地址, 就可以逐个地得出各个元素的值了.例子: 首先定义1个1维数字型数组, 并且赋值. int A[10]={10,1,2,3,4,5,6,7,8,9}; 这里说明一下, c语言中大部分情况下如上面这个语句这样, 定义1个数组的同时就对它赋值了, 这是最方便的. 也可以先定义再赋值. 如 int A[10]; A[0]=10; A[1]=2;........ 但是不能用A={10,1,2,3,4,5,6,7,8,9}; 会编译失败~ 跟住定义1个指针. int *p; 这时.
阅读全文
摘要:首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代码的工具, 肯定没有IDE来的直观了. 不过, 命令行自然有命令行的有点, 当你无法是使用IDE时, gdb有时会帮上很大的忙. 下面用1个例子来说明用法吧: 建立1个目录testgdb2 1. 编写c文件test.c可以见到在23行, call 了 test2.c的函数, 而且引用了头文件 test2.h 2. 编写头文件 ./headfiles/test2.h只声明了1个函数啦 3. 编写c文件test2.c 编写对应函数的内容啦. 4. 编写Makefile这里要注意, gcc 命令默认编译出来的可执行文件是不带...
阅读全文
摘要:转自:http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm?1342534982#6.2.5 第六章 二进制、八进制、十六进制 6.1 为什么需要八进制和十六进制? 6.2 二、八、十六进制数转换到十进制数 6.2.1 二进制数转换为十进制数 6.2.2 八进制数转换为十进制数 6.2.3 八进制数的表达方法 6...
阅读全文
摘要:网上关于gcc -I 的教程好少,试左成晚终于试左出来。假如系目录 ~/testmake/下面有2个c文件同1个makefile: file1.c file2.c Makefile系另个目录 ~/testmake/headfiles/ 有1个头文件: file2.h其中file2.h内容为:#ifndef __FILE2_H_#define __FILE2_H_ void File2Print();#endif即系头文件同埋c文件唔系同1个目录, 有两种写法:==================================================================..
阅读全文
摘要:转自:目的:基本掌握了make的用法,能在Linux系统上编程。环境:Linux系统,或者有一台Linux服务器,通过终端连接。一句话:有Linux编译环境。准备:准备三个文件:file1.c, file2.c, file2.hfile1.c:#include <stdio.h>#include "file2.h"int main(){printf("print file1$$$$$$$$$$$$$$$$$$$$$$$$\n");File2Print();return 0;}file2.h:#ifndef FILE2_H_#defineFIL
阅读全文
摘要:转自:http://hi.baidu.com/ilonng/blog/item/a0232435fbcfb90490ef390d.html/cmtid/68d4ab7bbb8026fb0ad187be 本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢。在此之前,先了解一个基本概念。 头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定 义、宏的定义等等。当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制..
阅读全文