更新時(shí)間:2017年11月30日15時(shí)32分 來源:傳智播客 瀏覽次數(shù):
1、賦值構(gòu)成一個(gè)表達(dá)式,具有值,其值為賦值符左邊表達(dá)式的值。表達(dá)式和語句的一個(gè)重要區(qū)別是,表達(dá)式有值,而語句沒有值。
2、隱式類型轉(zhuǎn)換總是朝著表達(dá)數(shù)據(jù)能力更強(qiáng)的方向,并且轉(zhuǎn)換總是逐個(gè)運(yùn)算符進(jìn)行的。如
float f=3.5;
int n=6;
long k=21;
double ss=f*n+k/2;//在計(jì)算ss時(shí),首先將f和n轉(zhuǎn)換成double,算得21,然后計(jì)算k/2得10,再將10(long int)轉(zhuǎn)換成double,最后得31。
27、C++基礎(chǔ)筆記(一) - EdwardLewis - 墨涵天地
有符號數(shù)向無符號數(shù)轉(zhuǎn)換。
3、當(dāng)又有聲明又有定義時(shí),定義中不允許出現(xiàn)默認(rèn)參數(shù),如果函數(shù)只有定義,才允許默認(rèn)參數(shù)出現(xiàn)在定義中。默認(rèn)值可以是一個(gè)全局變量,全局常量,或是一個(gè)函數(shù),但是不能是局部變量,因?yàn)槟J(rèn)參數(shù)的函數(shù)調(diào)用是在編譯時(shí)確定的,而局部變量的位置和值在編譯時(shí)是無法確定的。如
int a=1;
void fun()
{
int i;
void g(int x=i); //not right
int g(int x=a); //right
}
4、define宏定義指令
1) 使用其定義常量已被C++中的const定義語句所代替。
2) 用來定義帶參數(shù)的宏,已被C++的內(nèi)聯(lián)函數(shù)所代替。
3) 其一個(gè)有效的使用是在條件編譯中。
5、編譯時(shí)必須知道數(shù)組的大小。如
int a[]={1,2,3,4,5};//編譯器會自動去數(shù)
for(int i=0;i
...
6、C++會把注釋當(dāng)做空格。
7、Free和malloc
int* a;
a=(int*)malloc(sizeof(int));
cout<
free((void*)a);
int* b;
b=(int*)malloc(12*sizeof(int));
cout<
指向常量的指針常量:具有上述兩具指針的特點(diǎn),須在定義時(shí)初始化,且一旦賦值,則以后該指針的值將不會再發(fā)生變化,且通過指針不能改變所指向的變量的值,形如const int* const cpc="perfect";注意,這種情況下,*cpc的值也是不能改變的,如*cpc=n是不對的。
int main()
{
char* const pc="abcd";
cout<
cout<<*pc<
//*pc='b'; //有些編譯器可以通過,但是結(jié)果不對的
//cout<
const char* const cpc="perfect";
cout<
cout<<*cpc<
*cpc='n';//not right
cout<
return 1;
}
9、sum(int array[],int n)與sum(int* array,int n)是等價(jià)的。
10、函數(shù)返回值,可以返回堆地址,也可以返回全局或靜態(tài)變量的地址,但是不能返回局部變量的地址。
11、void指針是空類型指針,它不指任何類型,它僅僅是一個(gè)地址,不能進(jìn)行指針運(yùn)算,也不能進(jìn)行間接引用。
NULL與void* 是不同的概念,NULL是一個(gè)指針值,任何類型的指針都可賦予該值。而void* 是一種類型(語法上是一個(gè)類型,本質(zhì)上不是,沒有任何一個(gè)變量或?qū)ο?,其類型為void),是一種無任何類型的指針。不允許對void進(jìn)行引用。
12、由引號(" ")標(biāo)識,但不是用來初始化數(shù)組的字符串,是字符串常量,如cout<<"hello"<
由于字符串常量的地址屬性,兩個(gè)同樣字符組成的字符串常量是不相等的, 字符串常量的比較是地址的比較。
字符串常量,字符數(shù)組名(常量指針),字符指針均屬于同一種數(shù)據(jù)類型。
13、不能建立引用的數(shù)組,因?yàn)閿?shù)組是某個(gè)數(shù)據(jù)類型的集合,數(shù)組名表示起始地址,它不是數(shù)據(jù)類型。如
int a[10];
int& a1[10]=a; //not right
引用本身不是一種數(shù)據(jù)類型(int&不是類型,定義時(shí)也不產(chǎn)生內(nèi)存空間),所以沒有引用的引用。也沒有引用的指針。引用是變量或?qū)ο蟮囊?,而不是類型的引用,所以有空指針,但是沒有空引用。
Int& ri=NULL //沒有意義
可以用引用返回值。在通常情況下,C++會建立一個(gè)臨時(shí)變量以將函數(shù)返回值帶回。但是如果用引用,則不用建立臨時(shí)變量。
C++規(guī)定,臨時(shí)變量或?qū)ο蟮纳芷谠谝粋€(gè)完整的語句表達(dá)式結(jié)束后便宣告結(jié)束。所以如果以返回值初始化一個(gè)引用,應(yīng)當(dāng)先建立一個(gè)變量,將函數(shù)返回值賦于這個(gè)變量,作如下處理:
int x=fn1(5.0); //在這一句后臨時(shí)變量生命周期將結(jié)束
int& b=x;
*************************
float temp;
float& fn2(float r)
{
temp=10*r;
return temp;
}
用如上的方法,則函數(shù)返回值將不再創(chuàng)建臨時(shí)變量,而直接與全局變量temp共享內(nèi)存單元
*******************************
以引用的初始化,可以是變量,也以是常量,也可以是一定類型的堆空間變量,但是引用不是指針,如下表達(dá)是不對的:
int& a=new int(2); //not right
下面是用堆空間變量初始化引用的一個(gè)例子:
#include
#include
using namespace std;
int main()
{
double* pd=new double;
if(pd==NULL)
{printf("failed");exit(1);}
cout<
北京校區(qū)