C++基础

下午去图书馆还书,借了一年的《算法基础》,还有一本厚厚的《C++Primer Plus》。反正也没时间看了,趁下午再翻一遍就还了。还是找到了很多知识点,可见我的C++学得真有些不堪了。

1)逗号表达式

1)逗号有时应看做是操作符 for(int i=1,j=n;i<j;++i,–j){…}

2)有时仅仅是分开变量 int i,j;

3)逗号表达式按从左到右的顺序求值,最终的值是逗号右边的值 int a=(8051,83)//a=83;

2)*p++

这条语句作用是取p所指向的值,然后把p加一。但绝不是由于*的优先级比后缀的++要高。实际上,后缀的++优先级比*高,它后执行是因为它的副作用要在该语句其他动作执行完毕后再起作用。

3)<cctype>

就是isdigit(),isalpha()一类的函数,可能它们要比if(ch>’a’&&ch<‘z’)要可靠些,因为字符不一定是按ASCII码存的。(不过我没见过)

4)堆内存不主动释放

这点是有好处的。比如你可能在一个外部函数里面定义了一个数组,现在你需要它返回这个数组的指针,如果是直接int a[100];之类的定义,由于这是栈内存,这个函数执行结束后a指向的这块内存是要被释放的。这样你返回的数组a的地址就会变成所谓的“野指针”。但是如果你是这样定义的a: int *a=new [100];就不会出现问题,你可以在主函数或者其他任何地方delete掉。

5)switch开关语句

关键字case后面只能是数字或者字符。case相当于标记,满足则从该标记执行一直到break;或者switch结束。所以一个case块后面没有必要用{}括起来,只要后面写上break;

在switch块里面,break和case之间的语句会被跳过。比如:

#include <stdio.h>
int main()
{
int a=1,b=10;
switch(a)
{
b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}

这段程序会输出”b is 10″,因为 b=20被跳过了并没有执行。

 

6)const关键字

int bigeast=19;

const int* pbt=&bigeast;

这里pbt是指向常整数的指针,所以不可以*pbt=10;来改变bigeast的值;但是可以直接bigeast=10;
还有一种情况:

const int bigeast=19;

int* pbt=&bigeast;//不合法,不能将常变量地址赋给可变指针;

所以在定义函数的时候如果参数是指针类型,最好声明成const型的。这样做:

1)避免误修改其他值;

2)可以接受可变和常量值。因为如果形参不加const,那么const型的变量就无法传给这个函数。所以给qsort()函数写cmp()的时候要写成:int cmp(const void *p1,cosnt void* p2);

7)模(mu’)

template<typename T>//新版本T foo(T a){…}
template<class T>//较早的版本T bar(T a){…}

8)函数指针

函数名就是函数指针。这点似乎没有问题,但是仔细深究你会发现如果这个逻辑成立的话那么foo(a)和(*foo)(a)都会调用foo()这个函数!!这是不符合逻辑的!!但这就是C/C++.测试了一下(g++4.1.2)库函数间接调用(姑且这么称呼,其实是一个东西)的话,比如(*cos)(1)是不对的。

double (*tcos)(double);

tcos=cos;

cout<<tcos(1)<<endl;

cout<<(*tcos)(1)<<endl;
以上代码是可以正确运行的。可能cos和tcos的区别就像数组名和指针的区别(我指各个方面)?

9)有关类、面向对象

还没有深究。基本处于什么都不知道阶段。

Advertisements
上一篇文章
留下评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: