n01boy 发表于 2013-11-15 22:37:31

关于malloc函数的一点疑问。

struct student *p1;
      p1= malloc(sizeof(struct student));↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑我自己写的↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

struct student *p1, *p2;
      p1 = p2 = (struct student *)malloc(sizeof(struct student) );↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑小甲鱼老师↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

小甲鱼老师 零基础入门学习C语言056课->10:01对这里没有细说 malloc 的使用方法。

上面两个malloc函数的使用方法有什么区别呢?

我重点是不明白,老师在在malloc前加的(struct student *)是干什么用的。我觉得很有必要弄清楚这个,毕竟小甲鱼老师
不可能做无用功吧,否则,我就推倒他。。{:2_27:}

小刀 发表于 2013-11-15 22:46:32

类型转换,malloc返回的是void*类型的,所以要强制转换成(struct student*)类型的。

莫名C 发表于 2013-11-15 23:08:17

撸过 瞧瞧

n01boy 发表于 2013-11-15 23:15:47

小刀 发表于 2013-11-15 22:46 static/image/common/back.gif
类型转换,malloc返回的是void*类型的,所以要强制转换成(struct student*)类型的。

我写的那个,不转换类型的,运行程序依旧不会出错啊。那转换和不转换不就一样了吗?
转换更深层的含义是什么呢?是为了防止什么不可预测的错误吗?还是增加程序的可移植性?
或者是其他目的?

style?b? 发表于 2013-11-16 12:06:27

c99标准将malloc函数基类型定为void类型,当吧void指针付给不同基类型的指针变量(或者将某中基类型指针赋给void指针)。编译系统会进行自动类型转换,不必自己写代码
而在c99之前,malloc是char*型的,当将其赋给不同类型的指针时需要强制类型转换

不抛弃不放弃 发表于 2013-11-16 12:35:54

路过看看,不错不错- -

yanquanyu 发表于 2013-11-16 15:26:41

路过瞅瞅,不错

浅醉人生2012 发表于 2013-11-16 21:12:26

强制类型转换。。。。{:1_1:}

属専色灰 发表于 2013-11-17 02:25:25

这个问题还比较的像样,malloc就是在堆中开辟空间,你要开辟的空间大小就是那个类的字节数,为何要转指针呢?虽然指针都是一样,只占四个字节,但是他会它的类型而如何去偏移,比如 byte类型,那么指针所指向的值只占一个字节,懂了吧!最后注意释放,不然会内存泄露的..

xtanb5781441 发表于 2013-11-17 09:52:52

   mark{:5_109:}
页: [1]
查看完整版本: 关于malloc函数的一点疑问。