随笔分类 -  C/C++

摘要:一.副作用(side effect) 表达式有两种功能:每个表达式都产生一个值( value ),同时可能包含副作用( side effect )。副作用是指改变了某些变量的值。 如: 1:20 //这个表达式的值是20;它没有副作用,因为它没有改变任何变量的值。 2:x=5 // 这个表达式的值是... 阅读全文
posted @ 2011-04-20 15:08 Matrix海子 阅读(7911) 评论(5) 推荐(7) 编辑
摘要:一.运算符的优先级 在C++ Primer一书中,对于运算符的优先级是这样描述的: Precedence specifies how the operands are grouped. It says nothing about the order in which the operands are evaluated. 意识是说优先级规定操作数的结合方式,但并未说明操作数的计算顺序。举个例子: 6+3*4+2 如果直接按照从左到右的计算次序得到的结果是:38,但是在C/C++中它的值为20。 因为乘法运算符的优先级高于加法的优先级,因此3是和4分组到一起的,并不是6与3进行分组。这就是运算符 阅读全文
posted @ 2011-04-20 11:42 Matrix海子 阅读(9198) 评论(4) 推荐(7) 编辑
摘要:一.C语言中的const const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。 (1)用const修饰一般变量 注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外); 如: const int n; 这种声明方式是错误的 const int n=5; 正确 void fun(const int n); 正确 const char a; 错误 char * const p; 错误 const char *p;正确(. 阅读全文
posted @ 2011-04-18 21:53 Matrix海子 阅读(15889) 评论(13) 推荐(3) 编辑
摘要:C语言:char a = 'a';sizeof(char) = 1sizeof(a) = 1sizeof('a') = 4C++语言:char a = 'a';sizeof(char) = 1sizeof(a) = 1sizeof('a') = 1字符型变量是1字节这个没错,奇怪就奇怪在C语言认为'a'是4字节,而C++语言认为'a'是1字节。原因如下:C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器 阅读全文
posted @ 2011-04-04 10:41 Matrix海子 阅读(3709) 评论(2) 推荐(1) 编辑
摘要:在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题。 C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量。数据区又分为静态数据区、动态数据区,动态数据区包括堆区和栈区。以下是各个区的作用:(1)代码区:存放程序代码;(2)数据区a.静态数据区: 在编译器进行编译的时候就为该变量分配的内存,存放在这个区的数据在程序全部执行结束后系统自动释放,生命周期贯穿于整个程序执行过程。b.动态数据区:包括堆区和栈区 堆区:这部分存储空间完全由程序员自己负责管理,它的分配和释放都由程序员自己负责。这个区是唯一一个可以由程. 阅读全文
posted @ 2011-04-04 10:13 Matrix海子 阅读(12427) 评论(3) 推荐(11) 编辑
摘要:指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。(2)可以有co 阅读全文
posted @ 2011-04-03 22:27 Matrix海子 阅读(159686) 评论(10) 推荐(20) 编辑
摘要:在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。1.两者在含义上的区别。 数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。如:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char*s1=" 阅读全文
posted @ 2011-04-03 21:32 Matrix海子 阅读(17325) 评论(0) 推荐(5) 编辑
摘要:大家都知道指针是C语言中的精粹,学好了指针基本就等于学号了C语言,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。 下面谈谈几个指针中常见的问题:1.声明指针和取指针变量所指向内存空间的数据时所用到的 * 符号的意义如:int a;int *p=&a;*p=3;在int *p=&a中 * 仅仅为了说明p是一个指向整形数据的变量,而在*p=3中 * 表示取p所指向内存单元的数据,即*p与a等价;初学者容易犯下面这个错误:比如写一个 阅读全文
posted @ 2011-04-03 20:49 Matrix海子 阅读(13405) 评论(0) 推荐(4) 编辑
摘要:1.I/O函数(1)scanf函数:int scanf(const char *format…..);从标准输入流stdin中按格式format将数据写到参数表中;若操作成功,返回写到参数表中的参数个数,否则返回EOF;注意以下几点:①scanf函数没有精度控制如出现:scanf(“%6.2f”,&a);是绝对错误的②在以%c格式输入字符数据时,所有输入的均为有效字符如:scanf(“%c%c%c”,&a,&b,&c);输入:d e f则a=’d’,b为空格字符' ',c=’d’如果以%s读入字符串,则空格键和回车键都可以作为输入结束的标志如:s 阅读全文
posted @ 2011-04-03 19:36 Matrix海子 阅读(15032) 评论(0) 推荐(1) 编辑