- 博客(14)
- 资源 (4)
- 收藏
- 关注
原创 动态内存分配(2)
malloc(0)的理解1、首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0,就是说返回给你的指针是不能用的,感觉奇怪吧?但是从操作系统的原理来解释就不奇怪了,这要涉及操作系统维护内存的方法来说了,在内存管理中,内存被分为2部分,栈和堆,栈有自己的机器指令,是一个先进后出的数据结构,我就在这里不再过多解释了,malloc分配的内存是堆内存,由于堆没有自
2014-01-24 14:13:08 667
转载 嵌入式c语言面试题精选
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计
2014-01-23 16:48:46 849
转载 C中的volatile用法
C中的volatile用法volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i
2014-01-23 15:35:04 531
原创 删除一个字符串中相同字符
/*已知一个字符串,如str[20]="abcdaabcefgab",要求编程实现删除这个字符串中重复部分的字符,如该字符串删除重复的字符后应该是str[20]="abcdefg".*/#include int main(int argc,char *argv[]){char s[200];int count[127]={0};int i,k=0;pri
2014-01-20 18:59:16 1207
原创 指针详解(4)
一、指针类型转换当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。例一:float f=12.3;float *fptr=&f;int *p;在上面的例子中,假如我们想让指针 p 指向实数 f,应该怎么办
2014-01-20 18:15:12 669
原创 指针详解(3)
一、数组和指针的关系数组的数组名其实可以看作一个指针。看下例:例一:intarray[10]={0,1,2,3,4,5,6,7,8,9},value;value=array[0];value=array[3];value=array[4];//也可写成:value=*array; 也可写成:value=*(array+3); 也可写成:value=*(array+4);
2014-01-20 18:02:48 701
原创 指针详解(2)
一、运算符&和*这里&是取地址运算符,*是间接运算符。&a 的运算结果是一个指针,指针的类型是 a 的类型加个*,指针所指向的类型是 a 的类型,指针所指向的地址嘛,那就是 a 的地址。*p 的运算结果就五花八门了。总之*p 的结果是 p 所指向的东西,这个东西有这些特点:它的类型是 p 指向的类型,它所占用的地址是 p所指向的地址。例一:int a=12; int b;p
2014-01-20 16:43:30 618
原创 指针详解(1)
指针的复杂类型,一般会出现很多运算符,他们像普通表达式一样有优先级,其优先级和运算符一样,其原则:从变量名处起,根据运算符优先级结合,一步步分析。例如int p;//这是一个普通的整型变量int *p;//首先从 P 处开始,先与*结合,所以说明 P 是一个指针,然后再与 int 结合,说明指针所指向的内容的类型为 int 型.所以 P 是一个返回整型数据的指针int
2014-01-20 16:22:45 724
原创 ubuntu12.04 TFTP配置
ubuntu 12.04搭建tftp服务器的安装、设置、调试安装服务安装tftp-hpa tftpd-hpa xinetd# apt-get install tftp-hpa tftpd-hpa xinetd 在根目录创建文件夹/tftpboot #mkdir /tftpboot#chmod -R 777 /tftpboot
2014-01-20 14:24:42 924
原创 ubuntu下NFS配置
#sudo apt-get install nfs-kernel-serverubuntu12.04中的已经是最新版本了,无需安装打开/etc/exports文件,在末尾加入:/home/farsight *(rw,sync,no_root_squash)注:nfs允许挂载的目录及权限,在文件/etc/exports中进行定义,各字段含义如下:/home/f
2014-01-20 11:35:08 732
转载 浮点数在内存中的存储方式
浮点数保存的字节格式如下:地址 +0 +1 +2 +3内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM这里S 代表符号位,1是负,0是正E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。M 24位的尾数保存在23位中,只存储2
2014-01-16 19:18:35 810
转载 C语言内存分配时的栈和堆
1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值(函数参数值从右向左依次压入栈中),局部变量的值等。其操作方式类似于数据结构中的栈。内存中的栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。堆区是向上增长的
2014-01-16 19:09:16 868
转载 gets函数的漏洞
gets函数的漏洞gets函数和fgets函数最大的不同是gets函数的缓冲区虽然由用户提供,但是用户无法指定其一次最多读入多少字节的内容。这一点导致gets变成了一个非常危险的函数。下例演示了gets函数的危险性。该程序定义了一个缓冲区,但是使用gets函数接收用户输入的字符串时却会出现问题。(1)在vi编辑器中编辑该程序如下:程序清单21-5 risk.c 利用
2014-01-16 18:58:45 4262
原创 c语言中的动态内存分配
动态内存分配是在堆上开辟空间,当我们用malloc分配一个空间得到空间返回地址,而当我们想扩大空间时,用realloc返回的地址却不一定是原来的地址,这牵涉到内存的分页问题,例如: 1 #include 2 #include 3 #include 4 void main() 5 { 6 char *p1,*p2; 7 p1=(ch
2014-01-14 14:17:44 708
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人