pppphhhhyyyy 2023-04-05 17:19 采纳率: 80.6%
浏览 17
已结题

我今天看到动态内存申请malloc((int)sizeof(int))这个代码,我想请问一下为什么sizeof前面要强制转换为int

我今天看到动态内存申请malloc((int)sizeof(int))这个代码,我想请问一下为什么sizeof前面要强制转换为int?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-07 15:50
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7799126
    • 除此之外, 这篇博客: C语言创建动态数组(动态存储区)中的 1. void *malloc(unsigned int size) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      函数作用:开辟一个长度为size的连续空间,函数的返回值是所分配区域的第一个字节的地址,开辟空间失败返回NULL
      形参 size 的类型定义为无符号类型,表示开辟空间的长度
      要注意该指针的基类型是void,即不指向任何类型的数据。

      # include <stdio.h>
      /*
      	前已说明该函数是由stdlib库提供的
      	即在stdlib.h的头文件中声明的
      	因此使用前要把stdlib.h头文件包含到程序文件中
      */
      # include <stdlib.h>
      int main(){
      	const int N = 5;
      	int i,j,*p;
      	// 创建一个长度N*sizeof(int)的空间,可以理解为动态数组int a[N]
      	// 将地址转换成int * 型,可以省略,因为操作系统会自动进行转化
      	// 即 int *p = malloc(N*sizeof(int));这样定义也是没有问题的
      	p = (int*)(malloc(N*sizeof(int)));
      	// 数组初始化
      	for(i=0;i<N;i++)
      		*(p+i) = i+1;
      	printf("The array (made by malloc) : \n");
      	for(i=0;i<N;i++)
      		printf("%-4d",*(p+i));
      	printf("\n");
      	return 0;
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 4月5日