int和char陣列的問題,char 陣列該如何賦值?

2022-03-15 07:04:17 字數 5668 閱讀 1712

1樓:匿名使用者

你們注意看下為什麼不強制型別轉換的時候是輸出該位置char陣列以後的字母,而強制轉換以後就成了地址了

答: 這裡你應該注意到一個細節:如果你要輸出字串a,你會怎樣寫?

肯定是: cout << a << endl; 同理,這裡的a是陣列的首字元元素的地址.你一看到這裡就應該明白了,字串的輸出規定是:

從指定位置的記憶體地址開始輸出,直到遇到'\0'結束. 這樣你可以看到,實際上每次迴圈就把最開頭的字元去掉,把後面的都原樣輸出了

2樓:幸巴達

對啊,第一個你定義的陣列是char型別的,char型別元素佔用1個位元組。又因為陣列的地址是連續的,所有你輸出的地址總是差1.

而第二個你定義的元素是int型別的,int型別佔用4個位元組,所有每個地址之間的值差4.

我就是學這專業的!

3樓:

這和你所採用的資料型別有關。

第一個陣列是char型別的,char型別元素佔用1個位元組。

第二個你定義的元素是int型別的,int型別佔用4個位元組。

(具體佔用多少位元組可能根據機器不同會有所不同)

下面是不同編譯環境下的各資料型別所佔空間的大小:

資料型別: char short int long float double (long double)

gcc3.2.2: 1 2 4 4 4 8 12

visual c++:1 2 4 4 4 8 8

你可以用sizeof(int),和sizeof(char)來看一下他們佔用多少空間(c++)。

陣列的地址是連續的,所以你輸出的地址總是差1(和4)

記憶體空間分配時隨機的,所以你的程式多次執行的輸出結果可能會不一樣。

char[]陣列該如何賦值?

c++中的int和char之間的轉換問題

4樓:

這要用到ascii碼的知識,粗略講一下

字元'0'的ascii碼為

48,然後是'1' '2' '3' ... '9'

字元' '(空格)的ascii碼為32.

字元'a'的ascii碼為65,然後是'b' 'c' ... 'z'

字元'a'的ascii碼為97,然後是'b' 'c' ... 'z'

所以,把一個數字字元ch,轉為一個整數,就是ch-'0'當然ch-48也行

因為c和c++中,字元和整型是一樣的,可以隱式轉換

5樓:匿名使用者

int型和char型的長度不一樣。int佔4個位元組而char只佔一個位元組(大小視系統而定的),所以char轉int沒問題,反過來就可能出錯了

字母有對應的的ascii碼,所以a = b - '0'就是通過ascii碼轉換為數字的

int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),所以一般最好不要這麼轉換

6樓:匿名使用者

目前絕大多數編譯器,int 型資料佔 4 位元組, char 型佔 1 位元組。進行不同資料的強制轉換其實就是資料佔用位元組擴充或者截斷。

比如int a;

char b;

a=(int)b;

b=(char)a;

由 b 轉換成 int 型資料就是將 b 擴充 3 個位元組;而將 a 轉換成 char 型資料就是將 a 的最低位位元組擷取出來。因此,將資料由值域較寬型別強制轉換到值域較窄型別時,有可能出現資料資訊丟失。

你說的轉換錯誤其實不然,因為 char 型資料在機器裡通過 ascii 碼儲存,也就是用一個整數儲存的。譬如字元 ' 0 ',對應的 ascii 碼的十進位制數 是 48,因此強制轉換成 int 後,是 48,而不是 0 。要想將字元 '0' 轉換成整數 '0',就要使用你所說的 a = b - '0'; 或者 a = b - 48; 。

7樓:牽牛散步

第一,int型和char型的長度不一樣。int佔4個位元組而char只佔一個位元組。

第二,char型可以直接賦值給int型,值的大小是char字元對應的ascii碼值,例如: b = 'a'; a = b; 則a的值應該是97。

第三,int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此只有在int的值處在ascii碼範圍內的時候轉換後的值才是有意義的,如果超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),在vc6下是0

8樓:

首先你要清楚,在c++中int型佔4個位元組,而char型別

只佔1個位元組,char型別是可以轉化為int型別的,但int型別不一定可以轉換為char型別。

我對你這個問題的理解是,你想將0到9之間的數字轉化為char型別的,或是將'0'-'9'之間的字元轉化為int型的數字。

你如果要用強制轉換的話可以這樣:(0的ascii碼是48)

int a;

char b;

a=(int)(b-48);或b=(char)(a+48);

//這樣轉化的前提是a的範圍是0-9,b的範圍是'0'-'9'

在實際運用中,在整型和字元型之間轉化用得較多的應該要算int型與char *型別之間的轉化了。這個時候可以用atoi(字元型轉整型,可以分開理解a to i)和itoa(整型轉字元型,i to a),如:

int a=11111

char* b="33333";

a=atoi(b);//將整型轉化為字串

或itoa(a,b,10);//將字串轉化為整型,最後一個引數是進位制,在這裡是10進位制

9樓:匿名使用者

a=b-'0' 得到的數字是 0和b 兩個字母的機器**的差別, 不是數學意義上的數字.

另外int是兩個byte, char是一個. 也無法直接轉換.

想轉換字母和數字的話你可以試試系統程式 ctoi() 和 itoc()

10樓:徐良軍

在c++中,int轉換為char稱為隱式轉換,char轉換為int稱為顯式轉換。隱式轉換可直接轉換,顯示轉換則要強制性轉換,故b=a,可直接賦值,強制性轉換則要指明轉換型別,如:a=(int)b;

11樓:匿名使用者

轉換其實是對應的ascii碼來顯示的。比如char c=『a』; int i= c;

那麼i=65;是a對應的ascii碼。又比如 c = char(65);那麼c就是a;

12樓:踏岸尋柳

直接賦值即可,無須轉換。

如何將int型數值賦值給char型陣列

13樓:粒粒載畝

int型是四個位元組大小,char 型是一個位元組。

所以int型賦值給char陣列需要把int型拆分。

int型拆分成四個位元組,按順序儲存在char型陣列中就可以了。

具體**如下:

int i =4;

char a[100];

for(int j=0;j>(8*j))&0xff);

}其中int型的值4就儲存在了char型的陣列a中了。

14樓:匿名使用者

char a[100];

int i;

for(i=0;i<100;i++) //100個陣列元素都賦值為4。

a[i]=4;

15樓:天天咬

char a[100];

int i = 4;

int loop = 0;

for(loop=0;loop<100;loop++)

16樓:匿名使用者

fill(a,a+100,4)

也可 memset(a,4,100)

關於char和int出來的陣列

17樓:匿名使用者

char值的取值範圍為-128--127,當n為13的時候值為129,超出char值型別的最大值,溢位,同理int,你可以試試,我試過了,原理一樣,希望採納!

char型陣列與int型陣列區別

18樓:

你這裡對s定義了兩次陣列,重複定義,編譯都通不過的,怎麼輸出,這是我在vc6.0中編譯的錯誤提示資訊:

error c2371: 's' : redefinition; different basic types

如果只定義其中一個陣列,有時結果不同,是這樣的:定義陣列時s即是陣列第一個元素的地址也是,也是陣列的起始地址。在vc6.

0環境下,定義int陣列時輸出s是陣列起始地址,當定義char時先輸出第一個元素,不為空接著輸出下個,直到遇到空字元結束為止。

19樓:

陣列名是地址,所以整數陣列輸出地址.

但c++規定使用字元陣列名就是使用它儲存的字串

所以字元陣列輸出內容

20樓:

char字元是以asc碼為實際儲存數值的輸出的當然是asc碼了

21樓:許詩文

char 表示的數值範圍是: -128 ~ 127 unsigned char 表示的數值範圍是: 0 ~ 255

int 是2位元組(16位處理器)或4位元組(32、64) long int 32 位, short int 16 位。數值範圍 不同。

char 是1位元組。

當int 表達0-127 的時候,他只用了一個位元組的空間,另外的位元組並沒用使用;而char 位元組是隻有一個位元組的大小,所以這個**的意思為在int表達0-127的時候,他和char的值是一樣的,而且是正常的。

但是可以通過使用%c 或%d來讓這個變數表示它的值所代表的asc2值或者它的值的大小。 int a=97;

printf(「%d" ,a) //output 數字97

printf("%c" ,a) //output 'a' 因為a的asc值為97;

int函式

將數字向下舍入到最接近的整數,即取不大於自變數的最大整數,例如:int[6.4]=6 int[-9.

7]= -10 語法 int(number) number 需要進行向下舍入取整的實數。 示例 如果將示例複製到空白工作表中,可能會更易於理解該示例。 a 1 資料 2 19.

5公式 說明(結果)

=int(8.9) 將8.9向下舍入到最接近的整數(8) =int(-8.9) 將-8.9向下舍入到最接近的整數(-9)

=a2-int(a2) 返回單元格a2中正實數的小數部分(0.5)。

22樓:匿名使用者

操作符過載,你cout << (void*)s << end;再試試?

這個就是操作符過載:

#include

using namespace std;

struct a

a& operator<<(void*i)a& operator<<(ostream& (*op) (ostream&))

};int main()

關於彙編int內中斷的問題,彙編 int中斷的問題

內中斷是隻能使用立即數的,例如int 21h,int 16h等,如果要呼叫int ax這種指令的話是不行的,但是我們可以其他辦法實現,根據ax的值找到對應中斷在中斷向量表中的位置0 ax 4 0 ax 4 2 取得相應中斷的入口段地址和偏移地址,再利用call指令呼叫就可以了,效果是完全一樣的,希望...

易語言陣列問題,易語言中陣列的問題

程式集整數型變數 程式集整數型變數 1 如果 取陣列成員數 文字 程式集整數型變數 標籤1.內容 文字 程式集整數型變數 否則 標籤1.內容 end 陣列不等於引數,陣列就copy是一個陣列變數,不光易語言有變數陣列這個概念,其它也有.陣列是在程式設計中,為了處理方便,把具有相同型別的若干變數按有序...

硬碟轉速和RAID的問題,磁碟陣列RAID0模式是不是硬碟越多速度越快?

這個要看控制器了,有些控制器不允許這麼做,常見的卡可以用,但不建議,另外,15k的比10k的同容量貴幾乎一倍,真沒必要。磁碟陣列 raid 0模式 是不是硬碟越多速度越快?趨勢復是增加的,但速度增加不是線制性的,就是沒有你說的這麼明顯,這是因為raid0 磁碟增加也就是增加了寫入和讀取的頻寬,但讀取...