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 磁碟增加也就是增加了寫入和讀取的頻寬,但讀取...