#include<iostream>
using namespace std;
int main(){
char c1;
c1='a';
cout<<c1<<endl;
char c2[10];
c2[10]="a";
cout<<c2;
return 0;
}
uj5u.com熱心網友回復:
c2[10]="a";============
c2[0] = 'a';
uj5u.com熱心網友回復:
單個字符不能當字串嗎uj5u.com熱心網友回復:
要是想初始化就這么寫char c2[10]={'a','b'};要是想一個一個賦值就是a[0]='a',a[1]='b'
必須是單引號,雙引號是用來弄字串的
而且不能寫成a[10]='a',這么寫已經越界了,因為有隱藏字符'\0',’\0'是結束符
uj5u.com熱心網友回復:
單個的我們叫做字符,字串是多個字符疊加的結果,而字符陣列也是多個字符疊加,所以我們一般認為字符陣列=字串關于為什么會錯,這里講一下
首先要知道一個字符變數的記憶體是一個位元組,用雙引號括起來的是字串,單引號的是字符
并且字串的末尾會附帶一個空字符
你可以去試試
sizeof函式是用來回傳引數的所占記憶體
我們可以這樣測驗:cout<<sizeof("ABC");
這時你會驚奇地發現,結果是4,這便是上邊講到的,字串后會自動加上一個空字符('\0'),這個空字符也占用了一個位元組
所以c2[10]是字符陣列的變數,系統只為它提供了一個位元組的記憶體,而你將"a"給了它,這個"a"占了2個位元組,自然是不能實作的
那么假設你想要給一個字符陣列賦初值的話,有如下幾個方法:
1. c2="字串"; //這里要明白,陣列名其實是一個地址,并且是這個陣列的第一項;這樣寫是方便于賦值,將字串中的每個可見字符從下標0開始依次賦值給每個空間
2. c2={'字符1','字符2','字符3'}; //想必這個方法應該是不用解釋的,就是一般陣列的賦初值方式
【另外補充一點,我們在操作字符陣列時,比如說我們讀入一個字串,用字符陣列儲存,但是為了方便,你不希望從下標0開始讀入,你希望從1開始,這是我們可以用 陣列名+你想開始的下標 來表示,具體原理詳見指標操作】
uj5u.com熱心網友回復:
c2 10個元素,下標最大是9吧uj5u.com熱心網友回復:
單個字符可以當字串,關鍵是你宣告的是char型而不是stringuj5u.com熱心網友回復:
“c2[10]是字符陣列的變數,系統只為它提供了一個位元組的記憶體” 這句話不是很懂
uj5u.com熱心網友回復:
懂了!因為我定義的是char型!感謝!!!
uj5u.com熱心網友回復:
單個字符可以當字串,關鍵是你宣告的是char型而不是string
感謝你的回答??
uj5u.com熱心網友回復:
c2[0] = 'a';uj5u.com熱心網友回復:
單個的我們叫做字符,字串是多個字符疊加的結果,而字符陣列也是多個字符疊加,所以我們一般認為字符陣列=字串
關于為什么會錯,這里講一下
首先要知道一個字符變數的記憶體是一個位元組,用雙引號括起來的是字串,單引號的是字符
并且字串的末尾會附帶一個空字符
你可以去試試
sizeof函式是用來回傳引數的所占記憶體
我們可以這樣測驗:cout<<sizeof("ABC");
這時你會驚奇地發現,結果是4,這便是上邊講到的,字串后會自動加上一個空字符('\0'),這個空字符也占用了一個位元組
所以c2[10]是字符陣列的變數,系統只為它提供了一個位元組的記憶體,而你將"a"給了它,這個"a"占了2個位元組,自然是不能實作的
那么假設你想要給一個字符陣列賦初值的話,有如下幾個方法:
1. c2="字串"; //這里要明白,陣列名其實是一個地址,并且是這個陣列的第一項;這樣寫是方便于賦值,將字串中的每個可見字符從下標0開始依次賦值給每個空間
2. c2={'字符1','字符2','字符3'}; //想必這個方法應該是不用解釋的,就是一般陣列的賦初值方式
【另外補充一點,我們在操作字符陣列時,比如說我們讀入一個字串,用字符陣列儲存,但是為了方便,你不希望從下標0開始讀入,你希望從1開始,這是我們可以用 陣列名+你想開始的下標 來表示,具體原理詳見指標操作】
“c2[10]是字符陣列的變數,系統只為它提供了一個位元組的記憶體” 這句話不是很懂
你可以去查一下,short [int]型占了2個位元組,long [int]/[long] int型變數占了4個位元組,long long [int]占了8個位元組
你應該知道8個bit位=一個byte位元組,那么我們來看看
2^1(表示2的n次方)=(這里我將結果轉成了二進制)10
2^2=100
2^3=1000
2^4=10000
這時我們發現
2^n=1(跟上n個0)
那么我們來看看
short占用了2個位元組,也就是16位
每個位是用來記錄0或1的
根據我們推匯出的來看
2^16=1(加上16個0)
那么我們就會發現,本身它就已經自帶了16個0,是不是已經將short的記憶體都占滿了?,但是我們發現前面還有一個1
所以我們就可以知道short的取值范圍應當是2^16-1,這時你就會問了,為什么是16次方,可是書上是15次方啊?
我們忽略了一點,short是可以取負數的,所以在這16位中我們需要一個位來標識正負,這個位我們叫做“符號位”
【剛剛寫完才發現好像跑題了,您將就看著吧
,這些東西是關于記憶體的問題,看書基本上就可以解決】
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123398.html
標籤:C++ 語言
下一篇:新人求解一道難題,在線等大佬
