我想了解malloc和字符數組(c樣式)是如何工作的。考慮下面的代碼,使用malloc,字符數組和指針
// Example program
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main()
{
//section1: Init
char line0[10] = {'a','b','c','d','e','f','g','h','i','j'};
char line1[10] = {'z','y','x','w','v','u','t','s','r','q'};
//section2: Allocate Character array
char* charBuffer = (char*) malloc(sizeof(char)*10);
cout<<sizeof(charBuffer)<<endl;
//Section3: add characters to the array
for (int i=0;i<10;i++)
{
*&charBuffer[i] = line0[i];
}
//Section4:-add character to array using pointers
for (int i=0;i<15;i++)
{
charBuffer[i] = line1[i%10];
}
//section5:-address of characters in the array
for (int i=0;i<15;i++)
{
cout<<"Address of Character "<<i<<" is: "<<&charBuffer[i]<<"\n";
}
char *p1;
p1 = &charBuffer[1];
cout<<*p1<<endl;
cout<<charBuffer<<endl;
free(charBuffer);
return 0;
}
輸出: -
8
Address of Character 0 is: zyxwvutsrqzyxwv
Address of Character 1 is: yxwvutsrqzyxwv
Address of Character 2 is: xwvutsrqzyxwv
Address of Character 3 is: wvutsrqzyxwv
Address of Character 4 is: vutsrqzyxwv
Address of Character 5 is: utsrqzyxwv
Address of Character 6 is: tsrqzyxwv
Address of Character 7 is: srqzyxwv
Address of Character 8 is: rqzyxwv
Address of Character 9 is: qzyxwv
Address of Character 10 is: zyxwv
Address of Character 11 is: yxwv
Address of Character 12 is: xwv
Address of Character 13 is: wv
Address of Character 14 is: v
y
zyxwvutsrqzyxwv
我想了解以下,
- 爲什麼CharBuffer的8的尺寸(見輸出的第一行)雖然我已經分配了10的大小?
- 爲什麼我能夠爲charBuffer添加15個字符,儘管我已經使用malloc爲10個字符分配了內存? (請參閱代碼的第4部分)
- 爲什麼打印參考索引之後的字符而不是第5部分輸出中相應字符的地址?
- 如何查找單個字符的地址?
- 當字符數組的元素被填滿時,可以知道數組的大小嗎?例如,在第3節的循環中顯示sizeof(charbuffer),我們應該得到1,2,3 ..,10?
Gees ...每個問題一個問題,請! –
@LightnessRacesinOrbit對不起。但是當背景相同時發佈5個背靠背問題是否可以? – Naveen