随笔分类 -  语言C

摘要:用法: char dst[256] = {0}; char *src = "src"; strncpy(dst, src, sizeof(dst) - 1); 阅读全文
posted @ 2014-06-27 16:22 helloweworld 阅读(182) 评论(0) 推荐(0)
摘要:1. 返回的是想要复制的字符串长度(不包括'\0'),如源字符串是"12",则返回2;如源字符串是"123",则返回3;而不管目标字符串的长度是多少.2. 最多复制sizeof(dst)-1个字符,剩余的一个用'\0'补上.#include#includeusing namespace std;in... 阅读全文
posted @ 2014-05-22 23:10 helloweworld 阅读(1625) 评论(0) 推荐(0)
摘要:位域的定义 struct data { unsigned short flaga:1; unsigned short flagb:3; char flagc:5; }; 1、1/3/5指的是二进制位数,即比特数,而不是字节数。 2、位域的类型只能是整型或字符型。如下面是不正确的 struct data{ unsigned short flaga :1; unsigned short fla... 阅读全文
posted @ 2013-07-08 10:26 helloweworld 阅读(304) 评论(0) 推荐(0)
摘要:前言:迭代的是人,递归的是神。——L. Peter Deutsch展开递归调用,是分析递归的利器。进行数学归纳,是使用递归的利器。对初学者而言,讲一大堆理论,不如举一个例子。本系列分三篇分析及使用递归。第一篇——递归调用的分析第二篇——递归调用的初步使用第三篇——递归调用的进阶使用一、递归调用的一般结构。递归函数一般有如下特征:recursionFun(){ //第一部分:递归结束条件,前期处理。 if 递归结束条件 return; //第二部分:递归调用。 recusionFun(); //第三部分:递归调用后期处理,也可能有return语句。}二、递归调用的4种形式。下面看递归调用的4种形 阅读全文
posted @ 2013-05-28 23:26 helloweworld
摘要:float f = -8.25; int *pi = (int*)&f; printf("%d\n", *pi);输出-1056702464,为什么呢? 阅读全文
posted @ 2013-05-20 20:33 helloweworld 阅读(448) 评论(0) 推荐(0)
摘要:内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指 令集中,效率很高,但是分配的内存容量有限。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用ma... 阅读全文
posted @ 2013-05-05 13:19 helloweworld 阅读(318) 评论(0) 推荐(0)
摘要://============================================================================// Name : Testcpp.cpp// Author : Lucas// Version :// Copyright : @Lucas// Description : 先入栈的在高地址。//=====... 阅读全文
posted @ 2013-05-05 12:27 helloweworld 阅读(293) 评论(0) 推荐(0)
摘要:http://wenku.baidu.com/view/9cd7728984868762caaed5b5.html #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们... 阅读全文
posted @ 2013-04-20 19:36 helloweworld 阅读(376) 评论(0) 推荐(0)
摘要:一、new和delete1、operator new和operator delete只适合用来分配单一对象。Arrays所用的内存由operator new[]分配出来,并由operator delete[]归还。2、operator new无法满足某一内存分配需求时,它会不断调用new_handler函数尝试分配内存,当指向new_handler函数指针是null时,operator才会抛出异常。3、placement new和placement delete:对于 Widget *pw = new Widget;共有两个函数被调用:一个是用以分配内存的operator new,一个是Wid 阅读全文
posted @ 2013-03-20 16:40 helloweworld 阅读(182) 评论(0) 推荐(0)
摘要:第一章 C:穿越时空的迷雾1、auto关键字显然是摆设,意思是“在进入程序块时自动进行内存分配”,与全局静态分配或在堆上动态分配相反。2、register关键字。3、“任何学习或使用c语言的人都应当使用ANSI C,而不是K&R C”。4、未确定的(unspecified)——在某些正确情况下的做法,标准并未明确规定应该怎么做。如:计算参数的顺序。未定义的(undefined)——在某些不正确情况下的做法,但标准并未规定应该怎么做。如:有符号整数溢出该采取什么行动。约束条件(a constraint)——这是一个必须遵守的限制或要求。注:未确定的不会导致错误,但是未定义的可能会导致错误 阅读全文
posted @ 2013-03-17 17:54 helloweworld 阅读(228) 评论(0) 推荐(0)
摘要:什么是静态链接,动态链接 如果函数库的一份拷贝是可执行文件的物理组成部分,那么我们称之为静态链接。 如果可执行文件只是包含了文件名,让载入器在运行时能够寻找程序所需的函数库,那么称为动态链接。 即根据函数库是不是可执行文件的组成部分区分静态链接和动态链接。 动态链接的优点 1、可执行文件的体积小。 2、虽然运行速度稍慢,但是能更加有效的利用磁盘空间,因为函数库只有在需要时才被映射到进程中。 3、操作系统内核保证映射到内存中的函数库能被使用它们的所有进程共享,从而提高系统整体性能,如果是静态链接,则每个文件都会拥有一份单独的拷贝,无疑浪费资源。 即动态链接的函数库是共享的。 阅读全文
posted @ 2013-01-02 14:33 helloweworld 阅读(203) 评论(0) 推荐(0)
摘要:/*c语言动态数组,运行时确定数组元素个数。*/#include <stdio.h>#include <malloc.h>int main(void){ int *p; int n; /*运行时分配内存*/ scanf("%d", &n); p = (int *)malloc(sizeof(int) * n); /*输入数组元素*/ int i; for (i = 0; i < n; i++) { scanf("%d", &p[i]); } /*输出数组元素*/ int j; for (j = 0; j &l 阅读全文
posted @ 2012-12-28 14:22 helloweworld 阅读(372) 评论(0) 推荐(0)
摘要:int calendar[12][31]; 看作,“一维”数组有12个元素,每个元素是一个有31个整型元素的数组。 阅读全文
posted @ 2012-12-28 14:00 helloweworld 阅读(130) 评论(0) 推荐(0)
摘要:在词法分析中,有条规则:每个符号应该包含尽可能多的字符,被称为“贪心法”或“大嘴法”。 K&R表述如下:如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。 如: a---b 被编译器解释为 (a--)-b 阅读全文
posted @ 2012-12-27 19:19 helloweworld 阅读(158) 评论(0) 推荐(0)
摘要:老版本有运算符 =- (现在是-=)这时,a=–1;有二义性! 阅读全文
posted @ 2012-12-24 20:53 helloweworld 阅读(622) 评论(0) 推荐(0)
摘要:#include <assert.h>void assert(scalar expression);表达式为假,则调用abort终止程序的执行。也就是说,只有在满足表达式的情况下,程序才继续执行。 阅读全文
posted @ 2012-12-05 11:03 helloweworld 阅读(190) 评论(0) 推荐(0)
摘要:#include <stdio.h>int main(void){ printf("%d\n", 6); printf("%4d\n", 6); /*至少4位字符宽*/ printf("%03d\n", 6); /*至少3位字符宽,且不足则补0*/ printf("%04d\n", 6); printf("%02x\n", 19); /*至少2位字符宽,16进制输出,不足则补0*/ printf("%f\n", 6); printf("%f\n" 阅读全文
posted @ 2012-11-21 20:46 helloweworld 阅读(2064) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/chio/archive/2007/11/24/970632.html volatile char a; a=0; while(!a){ //do some things; } do_other(); 如果没有 volatile, do_other()不会被执行。 volatile极易改变的意思。 表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。 在中断程序中经常会用到。 阅读全文
posted @ 2012-11-15 22:31 helloweworld 阅读(196) 评论(0) 推荐(0)
摘要:fopen头文件:#include <stdio.h>原型:FILE *fopen(const char *path, const char *mode);参数:文件路径path;打开模式mode.返回值:成功,返回FILE指针;失败,返回NULL.功能:打开一个标准I/O流。mode取值:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长 阅读全文
posted @ 2012-10-19 20:24 helloweworld 阅读(734) 评论(0) 推荐(0)
摘要:打开或创建文件:c++1234567891011121314151617181920212223242526272829303132333435363738394041424344/***********打开或创建文件**************头文件:#include<stdio.h>原型: FILE *fopen(const char *path,const char *mode); 功能:打开或创建文件。参数:mode有下列几种字符串,r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若 阅读全文
posted @ 2012-09-23 14:50 helloweworld 阅读(309) 评论(0) 推荐(0)