c - 获取指针数据的大小

标签 c pointers memory-management sizeof

我尝试了以下代码以查看如何获取指针数据的大小:

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 int main(){
  char *test_char_ptr = "This is just a test";
  int *test_int_ptr = (int *) malloc(16*sizeof(int));
  for(int i = 0; i<16; i++){
    test_int_ptr[i] = i;
  }
  printf("%s\n",test_char_ptr);
  printf("Test char 1: %d\n", (int)sizeof test_char_ptr );
  printf("Test char 2:%d\n", (int)sizeof *test_char_ptr );
  printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char)));
  printf("Test int 1:%d\n", (int)sizeof test_int_ptr );
  printf("Test int 2:%d\n", (int)sizeof *test_int_ptr );
  return EXIT_SUCCESS;
 }

代码的输出是(在 32 位 gcc 4.3 上):

This is just a test
Test char 1: 4
Test char 2:1
Test char 3: 20
Test int 1:4
Test int 2:4

我认为 sizeof(*test_char_ptr) 会给我 *test_char_ptr 中数据的大小。但它给了我 1 ,我认为这是 sizeof char 而不是数据。 test_int_ptr 也是如此。长话短说,我的问题是如何获取指针或动态内存分配数组中的数据大小。

最佳答案

如果不自己维护信息,那不是用 C 语言可以做的事情。你创建了数组,所以你在某一时刻知道它们的大小,你只需要自己跟踪它。您可以创建一个数据结构来帮助您,或者只是在根本没有任何数据结构的情况下仔细维护数组和大小信息。

此外,您的代码使用 strlen() 来获取字符串的大小 - 确保您记住返回的大小不包括终止空字符 ('\0 ');字符串常量的内存大小为 strlen(string) + 1

关于c - 获取指针数据的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570759/

相关文章:

c - Linux 上 fork() 创建的子进程是否可以在 SMP 环境中的单独内核上运行?

c - 取消引用 int 指针与 char 指针

c++ - 删除后指针还能用吗?

c - 在函数内部分配内存并将其返回

c++ - 我怎样才能明智地重载放置运算符 new?

ruby-on-rails - Ruby on Rails 内存管理

c - 如何从 R session 中更改 C 宏变量(预处理器定义指令)?

c - Makefile:将对象编译到源文件夹

c - 使用宏 "Higher Order Function"生成器在 C 中进行函数式编程

java - 尝试在我的 java swing 代码中查找内存泄漏