C语言高手进 int * p = (int *)malloc(sizeof(int));

   更新日期:2024.05.02
malloc()函数的作用是分配制定字节数的空间
sizeof()()为单目运算 求出对应类型所占用的字节数
(类型名)为单目运算 为强制类型转换
要注意的是 malloce函数申请得到的空间是无类型的空间 必须强制转换成对应指针可以指向的空间的类型
这里定义的是int *p 所以p指针只能指向int型空间
sizeof(int) 求得int类型所占的字节数
malloc(sizeof(int)) 申请一个跟int所占的空间大小一样的空间
(int*)malloc(sizeof(int)) 将申请得到的空间地址转换成了int类型空间地址
最后就可以赋值给指向int型空间的p指针了

int *p;//定义一个指向整型的指针变量
p=(int*)malloc(sizeof(int));
/*建立(动态申请)一块内存空间,建立的内存空间为一个整型变量的长度,并把建立的空间地址转化成指向整型的指针赋值给前面的整型指针变量p*/
如果这块动态内存不释放,相当于把一个整型变量的地址给前面的指针
例如:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int * p;
p=(int *)malloc(sizeof(int));
*p=5;
printf("p的地址是%d\n",&p);
printf("p的长度是%dByte\n",sizeof(p));
printf("p的值是%d\n",p);
printf("p指向地址的值是%d\n",*p);
printf("p指向地址的值的长度是%dByte\n",sizeof(*p));
return 0;
}

义实例实际上是指针数组的定义。
指针数组是指所定义数组的每个数组元素都是一个相应数据类型的指针,开设空间的操作可以应用循环语句进行,例如:对于char *p[10]; 可以应用
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*N); //为每个指针申请开设N字符的存储空间
开设后,对于p的使用与二维数组的使用格式类似,可以有效的使用两个下标,
如 p[0][0]='A';
还可以像每个指针中赋值字符串: p[2]="Beijing"; 当然字符串长度应该小于N。

而数组指针,是指定义为指向某个固定大小顺序空间的指针,定义的格式如下:
char (*pa)[10]; //定义一个指向拥有10元素的字符数组的指针,
int (*p)[10];
应用格式可以参考下述程序,申请空间、赋值、输出后,可以观察到100被赋值到第五行第十个元素,指针可以像二维数组一样通过两个下标引用所申请开设的空间。
#include<alloc.h>
main()
{ int (*p)[10];
int i,j,k;
p=(int(*)[10])malloc(sizeof(int(*)[10])*5); //申请开设5个单元,每个单元拥有10个连续空间
p[4][9]=100;
for(i=0;i<5;i++)
{ for(k=0;k<10;k++)
printf("%8d",p[i][k]);
printf("\n");
}
}

前面的 (int *)是强制转换,后面的malloc(sizeof(int)); 是在内存中创建一个连续长度为sizeof(int)的区间之后再返回该区间的首地址给int * p

sizeof是个关键字,用来计算指定数据类型或指定变量的空间大小(以字节为单位)
int a;
sizeof(a) = sizeof(int) = sizeof a;
malloc的参数是字节长度

相关链接

欢迎反馈与建议,请联系电邮
2024 © 视觉网