gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:58:14 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com