C 裡面怎麼可以知道變數的位元組數

時間 2021-12-20 17:08:50

1樓:匿名使用者

用sizeof()

假設你的變數為a

那就是sizeof(a)

c++中各種變數所佔位元組數

2樓:井鈺

樓主啊,這個不同型別的變數所佔的位元組數與你的機器有關

但是你可以通過sizeof(型別名)來確定他到底在你的機器上所占用

的位元組數,當然型別名不侷限於基本型別,還包括很多自定義型別

如類型別了等等,結構型別了,不過那些稍微複雜一點

還可以sizeof(表示式)//表示的是表示式結構所占用的位元組數

下面給個程式測試,樓主可以到自己電腦上試試:

#include

using namespace std;

int main()

我電腦上的執行結果顯示:

the size of an int is: 4bytes.

the size of a short int is: 2bytes.

the size of a long int is: 4bytes.

the size of a char is: 1bytes.

the size of a float is: 4bytes.

the size of a double is: 8bytes.

the size of a bool is: 1bytes.

3樓:匿名使用者

你可以條用sizeof()函式,它就是c++提供的檢視變數所佔位元組數目的函式,其中只有乙個引數,可以是某個變數名,也可以是某乙個資料型別,例如sizeof(int)和sizeof(a)(當然已經有:int a;)都返回4.

4樓:匿名使用者

不同的系統上,所佔空間是不同的。

可以用sizeof(型別名)來檢查對就型別所占用的位元組數量。

在c++中怎樣定義乙個半位元組變數

5樓:匿名使用者

定義不了半個位元組的變數,不過可在struct裡面定義任意bit的變數

struct a;

怎麼c++裡面的string型別的位元組數

6樓:匿名使用者

不知道你是不是想看string長度 用string.length()函式可以返回字串的長度 乙個字元佔乙個位元組 而且string有乙個字元表示結尾 這個字元不會被length計算 所以length+1就是所佔位元組 sizeof出來的數字是預設開的空間 也就是只要定義乙個string 系統就會為它分配32位元組

7樓:

string型別 -- string 不是變數型別,不叫「型別」

string是「類」,英文 class。

sizeof 是 運算子。不能算 class 佔記憶體的大小。

string類 成員函式 .length(), .size() 才能求它的字串 實際所佔的位元組數。

string類,它同 char 不一樣。char 是變數型別。

c++裡面輸入乙個資料型別,輸出他所占用的位元組數,下面這段有什麼問題,怎麼修改,求大神

8樓:匿名使用者

1.cin 是以流方式處理資料的,因此輸入資料時不能確定型別的;只有先確定型別,cin才會對應格式化;所以這與你的問題是矛盾的。

2.只有將它放入什麼變數,它才會進行相應轉換。上面這樣是輸入,才會轉化成 char 型別,所以你輸出永遠是 1.

9樓:匿名使用者

sizeof操作符是可以用變數的。

不過你的標頭檔案有問題,並要使用std這個namespace來直接使用cin和cout

應該是#include

using namespace std;

10樓:杜曼珠

這樣只能輸出i占用的位元組,要實現輸出某型別名所占用的位元組,應該要判斷輸入的文字,然後輸出sizeof(int)、sizeof(float)等

c++ 獲取乙個帶void指標的結構體變數 總共的位元組數?

11樓:

1. sizeof是一定行的,無論你的引數有多複雜,至於你說的記憶體對齊問題,用#pragma pack(1) 強制資料結構單位元組對齊。

2. 我不明白你說的x1佔多少位元組是什麼意思,如果這是考題,d這個引數就是迷惑人的,有沒有d這個引數,x1占用的記憶體都是sizeof(x),本例中#pragma pack(1) 那麼x1就是9,如果按照系統預設的#pragma pack(4),那麼x1占用的記憶體大小就是12,你的d就算1000萬,也是這麼大。

3. d表示x1->b分配乙個記憶體的大小,和x1沒半點關係,不信你delete x1而不去free(b),看看是不是記憶體洩露。

4. 正確的表述應該是:x1大小為sizeof(x) ; x1->b大小為d ;這兩個記憶體塊是分開的。

ps:#pragma pack(1)

struct x

int a;

void * b;

char c;

};#pragma pack()

12樓:匿名使用者

new的部分沒有通用的辦法,所以要記下來,這裡必須計算d。

其他部分直接sizeof(x), sizeof(x)已經考慮到了記憶體對齊等各種情況。

結果是sizeof(x) + d;

另外, "x1總共占有的位元組數"這句有兩種理解:

1. x1自身占用的位元組數 結果是sizeof(x)2. x1自身+x1初始化時通過new申請的記憶體, 結果是前面所說的sizeof(x) + d

x初始化時申請的記憶體同x一般不在同乙個連續區域,是分開的,至少不能假定是在一起的。

所以傳輸資料時,要分別傳送。

13樓:求知

你要是在網路上傳輸,最好不要這樣用,涉及不同平台記憶體對齊問題,建議用乙個buf 依次壓入。

你可以new buf[d];

memecpy(buf,&xx,len);

把len記錄下拉,然後傳輸buf和len

14樓:匿名使用者

試試_msize(void *p)

c++如何從檔案中讀乙個數字到變數

15樓:__________鄭晟

#include

#include

int main()

int i;

ifstream fin("c:\\test.txt");

if(!fin)

cout<<"cannot open input file.\n";

return 1;

fin>>i;

cout<我捨去了向檔案中寫的**。樓主可以自己建乙個txt檔案,然後自己在裡面寫個數字就行了。(注意檔案的路徑和檔名)

16樓:風若遠去何人留

1 首先,需要知道檔案中儲存的是什麼型別的數字,是實數的話,就需要用double或者float,是整數的話,就需要用int或者short,或者long。

具體選擇哪種型別,取決於實際資料的大小和精度。

2 定義對應型別的變數,如

int value;

3 建立fstream物件開啟檔案:

fstream fs(filename);

4 使用》運算,將數字讀到變數:

fs>>value;

17樓:匿名使用者

c++也可以用c的庫。

如:int shuzi;

file *fp = fopen("1.txt", "r");

if (fp == null)

fscanf(fp, "%ld", &shuzi);

...fclose(fp);

18樓:匿名使用者

是否漏了fin.close();

c++裡怎麼擷取變數的前2個位元組?

19樓:匿名使用者

lpstrfile buffer 根據變數的命名,大概推測這是乙個字串的指標。

假設乙個buffer,前2位元組就是 buffer[0]和buffer[1],

根據你的需要,你可以要字串複製函式strcpy去把 buffer的前2個位置的值取出來,然後將其轉換成int值。 atoi()

20樓:

可以用位運算。。。

比如int現在都是32位的,為4個位元組。

取第乙個位元組可以用

a=a&(0xff000000);

取第二個位元組可以用

a=a&(0x00ff0000);

依此類推。。。

21樓:匿名使用者

int size;

*((short *)&size) size的前兩位元組

c++裡 要使輸出的變數都保留小數點後1位 該怎麼限制

22樓:小肥肥

在輸出前面加上 cout << setiosflags(ios::fixed) << setprecision(1) 就行了,setprecision(1) 就是設定對應的精度,還要加上對應的標頭檔案 #include。

#include

#include

using namespace std;

#include

int main()

double d = 12.5638;

cout << setiosflags(ios::fixed)

<< setprecision(1)

擴充套件資料:

c++的語言基礎

整型整數常量

整數常量是不帶小數的數值,用來表示正負數。例2—2中ox55、0x55ff、1000000都是c++語言的整數常量。

c++語言的整數常量有三種形式:十進位制、八進位制、十六迸制。

(1)十進位制整數是由不以0開頭的0~9的數字組成的資料。

(2)八進位制整數是由以0開頭的0~7的數字組成的資料。

(3)十六進製制整數是由以0x或0x開頭的0~9的數字及a~f的字母(大小寫字母均可)組成的資料。

例如:0,63,83是十進位制數。

00,077,0123是八進位制數。

0x0,ox0,0x53,0x53,0x3f,0x3f是十六進製制數。

整數常量的取值範圍是有限的,它的大小取決於此類整型數的型別,與所使用的進製形式無關。

整型變數型別

整型變數型別有byte,short,int,long四種說明符,它們都是有符號整型變數型別。

(1)byte型別。

byte型別說明乙個帶符號的8位整型變數。由於不同的機器對多位元組資料的儲存方式不同,可能是從低位元組向高位元組儲存,也可能是從高位元組向低位元組儲存。這樣,在分析網路協議或檔案格式時,為了解決不同機器上的位元組儲存順序問題,用byte型別來表示資料是合適的。

(2)short型別。

short型別說明乙個帶符號的16位整型變數。short型別限制了資料的儲存應為先高位元組,後低位元組。

(3)int型別。

int型別說明乙個帶符號的32位整型變數。int型別是一種最豐富、最有效的型別。它最常用於計數、陣列訪問和整數運算。

(4)long型別。

long型別說明乙個帶符號的64位整型變數。對於大型計算,常常會遇到很大的整數,並超出int所表示的範圍,這時要使用long型別。

<< endl;

return 0;

23樓:匿名使用者

// 注意精度的設定不僅僅只針對一次輸出有效,而是針對所有的後續輸出streamsize old = cout.precision();

cout<

cout.unsetf(ios_base::fixed);

cout.precision(old); // 恢復原先的精度設定

有關C語言整型變數的問題知道的請進

沒錯的啊,在我的機器上執行是17.5 雖說這條int unit price 350l 有點問題,但350l賦值給unit price會自動轉化過來的。我用的是vs.net 2005。看來應該是系統環境有關吧,你去掉l看有沒問題看看。int unit price 350l這裡己錯了.長整數350l和基...

在C語言中,怎麼判斷變數是int型的還是char型的

變數是int型的還是char型,是由宣告決定的。函式呼叫時引數型別錯,你編譯時就通不過呀。unsigned char 可以當無符號整型用。 假設函式形式為 int function int n 方法1 判斷實參字長 int function int n 在c語言裡有個函式可以判斷輸入的是不是數字或者...

電腦裡面C盤的東西哪些可以刪除,哪些又不可以刪除呢

幸運的創業找我 可刪除的檔案,具體如下 1 首先windows下面的help資料夾裡的內容是可以刪除的,首先進入我的電腦,尋找 windows 資料夾 2 help裡面的這些檔案都是一些系統幫助檔案,可以全部刪除,如下圖所示 5 c windows temp 資料夾中的所有檔案 系統臨時檔案 可以全...