使用malloc, char数组和指针
Working with malloc, char array and pointer
我想了解malloc和字符数组(c风格)是如何工作的。考虑下面的代码
// 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的大小?
- 为什么我能够添加15个字符的charBuffer,虽然我已经分配内存只有10个字符使用malloc?(见规则第4节)
- 为什么在第5节的输出中打印参考索引后面的字符而不是相应字符的地址?
- 如何找到单个字符的地址?
- 有可能知道数组的大小作为字符数组的元素被填充?例如,在第3节中显示循环中的sizeof(charbuffer),我们应该得到1,2,3…,10?
为什么charBuffer的大小是8(见第一行输出),虽然我已经分配了10的大小?
它不是。你输出了指向该缓冲区的指针的大小。
为什么我能够添加15个字符的charBuffer,虽然我已经分配的内存只有10个字符使用malloc?
你不是。然而,相反地,计算机不被允许特意通知你的错误。你违反了内存规则。
为什么在第5节的输出中打印参考索引后面的字符而不是相应字符的地址?
因为在流中插入char*
会触发格式化的插入,因此流假定您正在流式传输c字符串。你就是。
如何找到单个字符的地址?
你可以写static_cast<void*>(&charBuffer[i])
来避免这种特殊情况的处理,而把地址打印出来。
有可能知道数组的大小作为字符数组的元素被填充?例如,在第3节中显示循环中的sizeof(charbuffer),我们应该得到1,2,3…,10?
数组的大小不会改变,只会改变为其写入新值的元素的数量。您可以使用计数器变量自己跟踪。
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空