c语言程序设计笔记手写图片,C语言程序设计笔记

《C语言程序设计笔记》由会员分享,可在线阅读,更多相关《C语言程序设计笔记(21页珍藏版)》请在人人文库网上搜索。

1、C程序设计笔记(V1.06)一、C语言执行流程:1、在C语言中,一个C语言源程序需要经过编译、连接和执行三个过程。其中编译是指将源程序(*,c)翻译成二进制形式的目标程序(*.obj),连接是指将目标程序与系统的函数库或用户自定义的目标程序连接起来形成可执行的目标程序(*.exe)。2、C语言程序如何在Dos环境下运行:从上图我们可以看出CL命令实现了DOS环境下的编译和连接,在执行时只需直接输入文件名就可以了。(这个过程有点类似于java程序在Dos中的运行)3、至于Linux下C语言程序的运行,将会在Linux C中介绍。C语言中的数据读取与强制转换:printf函数中的格式符规定了如何从。

2、内存中取数据,如%d表示从内存中取出两个字节(或四个字节)的数据并显示出来,因此,在利用printf输出数据时,一定要选好输出格式,在这个地方是不存在数据类型转换的。(注意:在printf语句中,float会自动转换成double类型!)C+中类型长度: char(1字节),.,+,-)【注意是后置的自增与自减】单目运算符(+,-,!,-,+(正负号),*,&,(类型),sizeof,new,delete)算术运算符(+,-,*,/,%)关系运算符(,=,)【向左结合】【向左结合】【向左结合】2、 结合性结合性主要用来指定优先级相同的两个相邻操作符的求值顺序。由上图可以看出,唯有単目、条件和赋。

3、值运算符在表达式的计算过程中遵循左结合的法则,其他的全部是右结合!3、 求值顺序有了优先级和结合性,并不能完全解决表达式计算顺序的确定性问题,如:a*b+c*d+e*f,这里没有规则要求那个乘法运算式子先进行计算,优先级在这个地方是不起作用的。因此,这还与操作数的计算顺序有关,但在C语言中,并没有规定所有操作数的求值顺序,而在java语言中,其求值顺序是固定的,即从左向右。也就说,C/C+在这个问题上更加灵活,因此,凡是需要求值顺序才能确定顺序的表达式是不具有可移植性的。但是,要特别注意的是,C/C+中特定对几个运算符设置了求值顺序,即&,|,?:和逗号运算符。数组、指针一、 数组1、 分类问。

4、题:按照不同的分类方法,数组可以分成不同类别。常见的分类方法有:按维数,按数组元素类型,空间分配方式(静态或动态)等。2、 数组中的基本语法:(1)数组同结构体一样,也是属于复合数据类型,它是有一些相同类型的元素组成,里面的元素,可以是基本类型,也可以为复合类型,如结构体数组。定义一个静态数组后,编译器会为数组分配指定大小的相邻连续的存储空间。另外需要注意的是,数组下标是从0开始的,但是与java语言不同的是,C编译器并不对数组的越界错误进行检查,而且会编译通过并自动生成一个垃圾值。int realarray10;for(int j=0;jf1(&array00,nrows,ncolumns)。

5、延伸引申函数与多维数组中的参数传递种类(在后面的数组与函数会出现)【方法二】利用动态分配函数生成任意宽度的二维数组Int *array1=(int*)malloc(nrows*sizeof(int*); /给指针数组分配空间For(int i=0;i delete a;int *a=new int5; delete a;(3)内存已经释放,却继续调用【分析】出现这种错误,主要表现在以下几个方面: return语句中的返回结果出现错误,不能返回指向“栈内存”中的指针或引用。C语言野指针“野指针”不是NULL指针,是指向“垃圾”内存的指针。(空指针是不指向任何内存的指针,而野指针或者迷途指针是指向。

6、一片垃圾内存的指针,当一个指针成为野指针后最好令其为空,避免一些不必要的麻烦!)人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。“野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如char *p = NULL;char *str = (char *) malloc(100);(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。

7、。参见7.5节。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法的指针。如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。char *p = (char *) malloc(100)。

8、;strcpy(p, “hello”);free(p); / p 所指的内存被释放,但是p所指的地址仍然不变if(p != NULL) / 没有起到防错作用strcpy(p, “world”); / 出错示例7-5 p成为野指针(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:class A public:void Func(void) cout Func(); / p是“野指针”函数Test在执行语句p-Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。结构体中的位段:结构体位段的声明方法。

9、:采用结构体结构,结构体中的成员是一个或多个位的字段,这些不同长度的字段实际上是存储在一个或多个整型变量中,因此,位段成员只能声明为int ,signed int和unsigned int.【注意】位段中的成员在内存中是从左向右分配的还是从右向左;位段中的最大数目;int是被当做有符号数还是无符号数等问题在不同的系统可能会有不同的结果。位段机制并非必须,完全可以通过移位和屏蔽来实现。位段机制降低了程序的可移植性!但是也有以下好处:(1) 它能够将长度为奇数的数据包装在一起,节省存储空间,如果程序需要这种数据结构挺多的话,效果更加明显。(2) 可以很方便地访问一个整型值的部分内容。【延伸】结构体。

10、的位段机制方便了程序员通过设置不同的系统环境,便于debug【延伸】结构体中位字段的存储:typedef structunsigned x_bit : 3;unsigned y_bit : 3;unsigned z_bit : 2;char w3; SAM_BIT;定义:SAM_BIT sam_bit;初始化: sam_bit.x_bit = 7;sam_bit.y_bit = 5;sam_bit.z_bit = 3;memset(sam_bit.w, 0x0, 3);查看内存:&sam_bit : 0x EF 00 00 00; 0xEF(11 101 111) 【Intel】从其存储可以看。

11、出,其时按照从右向左存储的,即低位存储。同理,若是想要输出x_bit的值,就只需要直接从内存低位处中找到三位二进制数据,并将其输出(注意符号扩展的问题)。#include#include #include #include #include #include typedef struct AAint b1:5;int b2:2;AA;void main()AA aa;char cc100;strcpy(cc,abcdefghijklmnopqrstuvwxyz);memcpy(&aa,cc,sizeof(AA);cout aa.b1 endl; /-16cout aa.b2 endl; / 1共同体(联合体):共同体实质是一种覆盖技术,即让几个不同变量共同占有一块内存空间。注意这个地方的共同占有的意思,即给共同体所分配的内存空间大小只要能容纳其中最大长度的成员就可以了,可以看出,这其实是一种节约内存 的技术。随着现在内存价格的下降,这种技术逐渐被忽略。共同体的长度就是其中最大成员类型的长度!(注意共同中可以嵌套结构体!)union int au;char ch2;a ;上面共同体中两个成员所引用的位置相同,只是每个成员的类型决定了这些位该如何解释!void main(。

你可能感兴趣的:(c语言程序设计笔记手写图片)