int _tmain(int argc, _TCHAR* argv[])
{
char str[20],str2[20];
cout<<str<<endl; //由于分配了空間,沒有寫入數(shù)據(jù),在輸出地時(shí)候讀沒有寫入數(shù)據(jù)的地址就回出現(xiàn)亂碼
for(int i=0;i<20;i++)
{
str[i]='a';
//if(i==10)
//{
// str[10]='\0';//字符串遇到了\0,就會(huì)結(jié)束,所以strlen(str)=10
//}
}
str[19]='\0';//結(jié)束字符串,沒有這一句就回出現(xiàn)亂碼
strcpy(str2,str);//將一個(gè)字符串賦給列一個(gè)相等容量的字符串是會(huì)出現(xiàn)亂碼的,因?yàn)樽址淖詈笠晃槐仨毷荺0
cout<<str<<" , "<<sizeof(str)<<" , "<<strlen(str)<<" , "<<str2<<endl;
int k = 5;
k = k + (++k);
cout<<k<<endl;
int b1;
cin>>b1;
return 0;
}
輸出結(jié)果如下:
char str[20];
定義一個(gè)長度為20的字符數(shù)組,系統(tǒng)會(huì)分配20個(gè)連續(xù)的空間給str;開始的時(shí)候每個(gè)空間里面都沒有值;
str指向數(shù)組的第一個(gè)空間,str相當(dāng)于一個(gè)常量指針,所以不能寫str=?;
sizeof(str)表式str所占的空間長度,char str[20]表示長度為20,也就是說sizeof(str)的值在定義的時(shí)候就已經(jīng)定了,
就是字符創(chuàng)數(shù)組的長度。
strlen(str)表示str中字符的個(gè)數(shù),這里有19個(gè),最后一個(gè)\0不算。
int k = 5;
k = k + (++k);
最后k=12;這個(gè)的確不太好理解
理解:可以這樣理解i++和++i:
對(duì)于一個(gè)表達(dá)式;如果有++i;就相當(dāng)于在表達(dá)式之前加入一行代碼i=i+1;
同理有i++;相當(dāng)于在表達(dá)式后面加入一行代碼i=i+1
int k = 5; k = k + (++k);相當(dāng)于int k=5;k=k+1;k=k+k;
測試題:遞歸實(shí)現(xiàn)猴子偷桃問題
//猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。
//第二天又將剩下的桃子吃掉一半,又多吃一個(gè)。以后每天都吃了前一天剩下的一半零一個(gè)。
//到第10天,只剩下一個(gè)桃子了。編程試求第一天共摘了多少桃子。
int Eat(int currentCount,int i)
{
if(i==10)
{
return currentCount;
}else{
currentCount=(currentCount+1)*2;
i++;
}
return Eat(currentCount,i);
}
cout<<Eat(1,10)<<endl;
得出第一天摘了1534個(gè)桃子。
最后一招猴子偷桃,竟然偷了1534個(gè)。