c++ - 使用 malloc、char 数组和指针

标签 c++ arrays pointers char malloc

我试图理解 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

我想了解以下内容,

  1. 为什么 charBuffer 的大小是 8(见输出的第一行),尽管我已经分配了 10 的大小?
  2. 尽管我使用 malloc 只为 10 个字符分配了内存,但为什么我能够向 charBuffer 添加 15 个字符? (参见代码第 4 节)
  3. 为什么第5节输出的是reference index后面的字符,而不是相应字符的地址?
  4. 如何找到单个字符的地址?
  5. 当字符数组的元素被填充时,有可能知道数组的大小吗?例如在第 3 节的循环中显示 sizeof(charbuffer),我们应该得到 1,2,3..,10?

最佳答案

Why is the size of the charBuffer 8(see first line of output) although I have allocated a size of 10?

不是。您打印出指向该缓冲区的指针的大小。

Why I am able to add 15 characters to charBuffer although I have allocated memory for only 10 character using malloc?

你不是。但是,相反地,允许计算机不特意通知您您的错误。你违反了内存规则。

Why are the characters after the reference index being printed instead of the address of the corresponding characters in the output for section 5?

因为插入一个 char*到流触发格式化插入,据此流假定您正在流式传输 C 字符串。好吧,你

How do I find the address of individual characters?

你可以写成static_cast<void*>(&charBuffer[i])以避免这种特殊情况处理并改为打印地址。

It is possible to know the size of the array as the elements of the character array are getting filled? For example display the the sizeof(charbuffer) in the loop in section 3, we should get 1,2,3..,10?

数组的大小永远不会改变,只会改变您写入新值的元素的数量。您可以使用计数器变量自行跟踪。

关于c++ - 使用 malloc、char 数组和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447341/

相关文章:

javascript 根据属性值从数组中删除所有对象

mysql - 如何在 Laravel 中将数组中的元素存储到变量中?

c - 在 'for' 循环初始值设定项中取消引用指针会产生段错误

C 双重类型转换

c - 以结构体数组指针作为参数的函数,C 语言

c++ - 将数字合并到对象的名称

c++ - 在 C++ 上使用 Levensthein 算法创建多距离矩阵

c++ - 模板基类的调用方法

c++ - 尝试将 gz 文件提供给 C++ 程序

c - 在结构数组中分配结构数据?