我是 C 编程的初学者。最近有人教我如何使用malloc,但我认为我不太了解它。就像事实上为什么它需要一个void *或任何类型转换?为什么语法本身(void *)在void *malloc(size_t size). 分配给函数的变量如何malloc知道内存块从哪里开始?该函数在分配内存块后是否malloc返回地址或其他内容?
在课堂上,我们的教授给了我们这个程序。我也了解 2d 内存分配是如何工作的。
#include<stdio.h>
#include<conio.h>
void main(void)
{
int *studentInfo=NULL,i=1,j=10,k=0,l=0;
//int *studInfo[10];
int memLoc=0;
clrscr();
printf("How many Student Information You want to store:");
scanf("%d",&j);
printf("How many Subject Marks per student You want to store:");
scanf("%d",&k);
studentInfo=(int *)malloc(j*k*sizeof(int));
//memLoc=0;
for(l=0;l<j;l++)
{
printf("Enter Marks for %dth Student",l+1);
for(i=0;i<k;i++)
{
printf("\nEnter Marks for Subject %d:",i+1);
scanf("%d",studentInfo+(l*j)+i);
}
}
//3 students and 3 subjects
//memory allocated=3*3*2=18
//0,1,2 student 0*no of students
//3 4 5 student 1
//6 7 8 student 2
printf("\nInformation you Entered\n");
for(l=0;l<j;l++)
{
printf("Makrs of Student %d:",l+1);
for(i=0;i<k;i++)
printf("\t%d",*(studentInfo+(l*j)+i));
printf("\n");
}
//*(studentInfo)=10;
//*(studentInfo+1)=20;
//*(studentInfo+2)=30;
//printf("%d\n",sizeof(studentInfo));
//printf("%d\n",*(studentInfo));
//printf("%d\n",*(studentInfo+i++));
//printf("%d\n",*(studentInfo+i++));
free(studentInfo);
getch();
}
在此我们将studentInfo指针分配给 malloc 函数,对吗?那么......如何studentInfo知道内存块的地址是美国而不是南极洲?而且我知道用其他数据类型对 malloc 进行类型转换不是一个好习惯。但是为什么(int *)。为什么 malloc 需要一个指针?如果 malloc 需要一个指针,这意味着它正在返回一个地址,对吗?我向我的朋友问过这个问题,他说没有 malloc 不会返回任何东西。还有一件事是我们需要将类型转换放在括号中吗?
请用非常简单的术语解释。谢谢你。