原创 C和C++语言学习总结(一

2009-4-17 12:52 2499 11 11 分类: MCU/ 嵌入式
 


C和C++语言学习总结(一)
知识结构:
1、if,for,switch,goto
2、#define,const
3、文件拷贝的代码,动态生成内存,复合表达式,strcpy,memcpy,sizeof
4、函数参数传递,内存分配方式,内存错误表现,malloc与new区别
5、类重载、隐藏与覆盖区别,extern问题,函数参数的缺省值问题,宏代码与内联函数区别
6、构造和析构的次序,String函数定义
具体实现:
1、if,for,switch,goto
if:
bool int float pointer char变量的使用方法
bool bParam;
int iParam;
float fParam;
int* pParam;
char cParam;
if(bParam) ,if(!bParam);
if(iParam == 0 ),if(iParam != 0 );
if(fParam>= -0.00001 &amp;&amp; fParam <= 0.00001);
if(pParam == NULL),if(pParam != NULL);
if(cParam == '\0'),if(cParam != '\0');
if/else/return的使用方法
if(condition)可以等价为 return (condition?x:y);
{
return x;
}
else
{
return y;
}
for:
执行效率问题:
int row,col,sum;
int a[100][5];
for(row=0;row <100;row++)效率低于 for(col=0;col <5;col++)
{{
for(col=0;col <5;col++) for(row=0;row <100;row++)
{{
sum = sum+a[row][col]; sum = sum+a[row][col];
}}
}}
int i;
for(i=0;i <N;i++)效率低于 if(condition)
{{
if(condition) for(i=0;i <N;i++)
DoSomething(); DoSomething();
else}
DoOtherthing(); else
}{
for(i=0;i <N;i++)
DoOtherthing();
}
for (int x="0";x <=N-1;x++)直观性差于 for (int x="0";x <N;x++)
switch:
switch(variable)
{
case value1: ...
break;
case value2: ...
break;
default: ...
break;
}
switch(c)中的c的数据类型可以是int,char,long,unsigned int,bool.
variable必须是整数或者强制为整数,由于char实际上是ASCII码,所以也可以.
c不可以是double,float,char*.
goto:
goto主要用于
{...
{...
{....
goto error;
}
}
}
error:
...
2、#define,const
#define和const区别
1、#define C语言
const C语言 C++语言
const常量有数据类型,编译器会进行类型安全检查,而#define没有数据类型,
const的常量可以进行调试,但宏常量不能进行调试.
2、const的使用方法
在全局定义 const float PI="3".1415926
在类中定义
class A
{...
A(int size);
const int SIZE;
};
A::A(int size):SIZE(size)
{
...
}
对参数和函数的定义(const只能修饰输入参数,不能修饰输出参数)
const int x="1";表示x的值是1,在程序中不能改变;
const int* x;表示x代表的地址所指向的内容是不能改变得;
int const* x;与const int* x;的表示的意思一样;
int * const x;表示x代表的地址是不能改变的;
当是输入参数时,不需要是void Func(const int i),void Func(const int&amp; i),可以是void Func(int i)
因为输入参数采用"值传递"(const int i),由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰;
不用const int&amp; i的原因在于内部数据类型的参数不存在构造、析构的过程,而复制也非常快,"值传递"和"引用传递"的效率几乎相当.
当是输入参数时,不需要是void Func(const A a),void Func(A a),可以是void Func(A&amp; a)或void Func(const A&amp; a)
不用const A a,A a的原因是函数的效率比较低,因为函数体内将产生A类型的临时对象用于复制参数a,而临时对象的构造、复制和析构过程都需要消耗时间
最好用const A&amp;a的原因是A&amp;a中的a可以被改变,A&amp;a和const A&amp;a的好处在于都不会产生临时对象,效率高;
const A Func(const A&amp;a )const的好处
第一个const表示返回的是个内部产生的对象,它不能被修改
const A Func(...)
{...}
const A a="Func"(...);//不能是A a="Func"(...);
第二个const表示输入的参数是引用传递,函数内部不会产生临时对象,而且这个对象不能被内部修改
第三个const表示此函数内部的所涉及的数据成员不能修改
class Stack
{
int m_num;
int GetCount(void) const;
int Pop(void);
}
int Stack::GetCount(void) const
{
m_num++;//编译错误,企图修改数据成员m_num;
Pop();//编译错误,企图调用非const函数
}
3、文件拷贝的代码
#i nclude <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
FILE* in;
FILE* out;
in=fopen("d:\\1.txt","rb");
out=fopen("d:\\2.txt","wb");
char ch="fgetc"(in);
while(!feof(in))
{
fputc(ch,out);
ch=fgetc(in);
}
fclose(in);
fclose(out);
return 0;
}
动态生成内存的代码
------------------------------------------
正确代码:
void GetMemory(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
char* GetMemory2(int num)
{
char* p = (char *)malloc(sizeof(char) * num);
return p;
}
------------------------------------------
错误的代码:
void GetMemory3(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
------------------------------------------


本文来自: DZ3W.COM 原文网址:http://www.dz3w.com/mcu/clanguage/050409//C285.htm

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-4-17 14:19

学习了,谢谢
相关推荐阅读
用户1436739 2009-09-18 22:23
目前已拥有商用3G网络的国家和使用标准
目前已拥有商用3G网络的国家和使用标准为: 阿根廷(CDMA200 1x) 澳大利亚(CDMA200 1x、CDMA200 1x);(WCDMA) 奥地利(WCDMA) 阿塞拜疆(CDMA200 1x...
用户1436739 2009-05-06 11:15
S-Video/PAL视频转换器
S-Video/PAL视频转换器现今的许多视、像设备都具有一个S-Video的视频输出端子.比如摄像机、卫星电视接收机等。本文的目的.就是要介绍一种简单的电路(如图1),它可以将S-Video制式的视...
用户1436739 2009-05-03 23:00
山东GD36电动自行车充电器电路
山东GD36电动自行车充电器电路 电路原理图见图12所示。该充电器为半桥式充电器.主要性能指标为:输入电压:170-260V;输出电压:44 V(可调);最大充电电流:1.8A;浮充充电电流:200~...
用户1436739 2009-05-03 22:30
电动自行车充电器电路及原理分析
石家庄某公司电动自行车单激式充电器电路本文来自: DZ3W.COM 原文网址:http://www.dz3w.com/sch/charge/0074370.html     充电器的原理图见图13。单...
用户1436739 2009-05-03 22:24
自制一款有源超低音音箱
自制一款有源超低音音箱本文来自: DZ3W.COM 原文网址:http://www.dz3w.com/diycn/music/0074365.html   许多朋友在欣赏音乐或观赏大片时,往往会感到低...
用户1436739 2009-04-20 13:17
什么是峰均比(CF)
什么是峰均比(CF)峰值因子(crest factor又稱peak-to-average ratio (PAR) 或 peak-to-average power ratio (PAPR))波形的測量,...
EE直播间
更多
我要评论
1
11
关闭 站长推荐上一条 /3 下一条