c语言 int *a = (int*)malloc(n*sizeof(int)); 是什么意思呀

作者&投稿:漫毛 (若有异议请与网页底部的电邮联系)
c语言求解释一下 a=(int *)malloc(n*sizeof(int))~

应该是:
int *a;
a=(int *)malloc(n*sizeof(int));
这个是动态内存分配
声明一个int型指针a,然后申请n个int型大小的区域(不一定是连续的区域,大部情况是链式区域),把这个内存区域的首地址赋值给指针变量a,这样就可以通过a来操纵申请的内存区域。

1、sizeof(int):sizeof是操作符,这里是计算int类型数据所占内存大小,根据不同的系统会有不同的值,在32位机器上其值为4
2、m*n*sizeof(int):m和n应该为变量或预定义值,其计算结果应为一数值
3、malloc(m*n*sizeof(int)):意思是申请上述过程计算的数值大小的内存
4、p应为一指向int类型数组的指针,其值为上述过程分配的内存首地址

int *a=(int *)malloc(n*sizeof(int)); 表示定义一个int类型的指针变量a,并申请n*sizeof(int)个字节(即4*n个字节)的存储空间。


malloc是在C语言中是一个申请内存单元的函数。

函数原型:void *malloc(unsigned size);

功       能:分配size个字节的内存空间

返 回  值:成功,返回分配的内存单元的起始地址;否则返回0


举例说明如下:

// 下面的定义方法是正确的
int *a=(int *)malloc(n*sizeof(int));  // 定义指针,并分配内存单元
*a = 4;  // 将值存入到指针a所指向的内存单元中

// 下面的定义方法就会出错
int *a; // 定义指针,没有分配内存单元
*a = 4;  // 此时系统不知道该将4存入到哪个内存单元(因为指针未指向具体的内存单元(此时称该指针为野指针)),所以执行的时候会出错(编译没错)。


定义一个指针,为该指针分配一个一块n个int空间的内存

当然malloc还可能会返回null就是了

动态分配内存给指针a,类似于分配a[n]大小的数据空间(n是常量时),只是这种方式下,n可以作为一个变量运行时确定,较为灵活,但是也要相应执行free操作,否则会出现内存泄漏。

sizeof(int)就是int类型占用的内存大小


邳州市15211332098: int *a=b与int*a=&b有什么不同 -
隆向甘悦: 这是典型的c语言指针题int *a表示定义了一个int型的指针 *a=b表示指针a指向b,即把b赋值给*a; &是取地址符,&b代表b在内存中的地址,*a=&b表示把b的地址赋值给*a. 利用编译器编译该代码: 结果为: 拓展资料*和&运算 (*p)操...

邳州市15211332098: int *a = new int(); -
隆向甘悦: 直观上很好理解,在new一个int的数组,数组的长度是存储int类型所需要的byte数与(len+1)的乘积.但是,很难理解为什么会产生这样的数组长度要求,看起来更像是要求数组长度为(len+1),那样的话本句应该是int *a = new int[len + 1];.

邳州市15211332098: c语言中int*代表什么意思 -
隆向甘悦: int*表示定义一个int*类型的变量,即int型的指针变量. int表示基本的数据类型(整型); *表示指针操作符. 举例如下: int a[]={1,2,3,4,5}; // 定义一个int类型的数组,包含5个元素int* p2=a; // 定义一个int类型的指针变量p1,指向数组a的首c语言中int*代表什么意思

邳州市15211332098: C语言中 指针int *a=10;和int *a; *a=10;的区别 -
隆向甘悦: int *p=10; // 相当于int *p; p=10;展开全部相当于把0x00001010(二进制的“10”)这个地址直接赋值给指针p.而int *p; *p=10;则是正确的写法,这里p的值由系统分配,比如是0x22334455,这个地址对应的内存单元存放的值是10.

邳州市15211332098: C语言中 int (*a[10])(int); 表示什么意思?这个a是哪种指针? -
隆向甘悦: 指向函数的指针数组 (ps : 搞明白数组指针和指针数组) 这个函数数组 返回值是 int ,传入的参数是 int

邳州市15211332098: c语言编程 int *a和int a [ ]有区别吗? -
隆向甘悦: int a[] 这样的定义是不符合语法的吧.除非 后面这样写int a[]={1,2,3,4,5};int *a;则是 指定义一个int 类型的指针 用来指向一个用来存放int型数据的地址.数组名 所表示的意...

邳州市15211332098: int *a=(int *)malloc(10); 和 int *a=(int *)malloc(10*sizeof(int)); 这两条语句的区别. -
隆向甘悦: int 类型根据不同的开发环境大小会有不同,在vc6中int类型是2个字节,在vc.net中是4个字节.int *a=(int *)malloc(10); 上面这句是静态的指定了分配内存的大小为10个字节 int *a=(int *)malloc(10*sizeof(int)) 而这一句则是会根据编译环境动态的分配了10个int类型的大小.也就是说,如果在VC6下编译,这一句分配了20个字节,如果在vc.net下编译,这一句就分配了40个字节.你的程序用malloc(10)的方法出错,估计是应为内存分配过小,不符合使用的需求,当你扩大了动态分配内存的大小后,就满足了程序的需求,所以程序就没问题了.

邳州市15211332098: c语言编程 int *a和int a [ ]有区别吗? -
隆向甘悦: int *a是定义一个整型指针变量a. int a [ ]没有这种写法. int *a[] 1、定义a是一个数组. 2、每一个数组的元素是一个指针,指向一个整数. (int *)a 将指针变量a强制转换为整型指针,说明a一般不是一个整型指针,也可以是个整型指针. int (*a)[...

邳州市15211332098: C语言 *(int *)a是什么意思? -
隆向甘悦: int *a指的是定义一个指向int类型数据的指针a,int a指的是定义一个整数变量a, int* a跟int *a是一样的,只是int *a更严谨, 比如,int *a,b; 只有a是指针变量int* a,b; 容易让人觉得a和b都是指针

邳州市15211332098: (int *)A与int *A在C语言中的区别?哪位能告诉我? -
隆向甘悦: (int *)A 是把A强制转化为int型指针,A应该已经定义了.一般是右操作数.int * A 是定义整型指针变量.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网