关于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:}
类型转换,malloc返回的是void*类型的,所以要强制转换成(struct student*)类型的。 撸过 瞧瞧 小刀 发表于 2013-11-15 22:46 static/image/common/back.gif
类型转换,malloc返回的是void*类型的,所以要强制转换成(struct student*)类型的。
我写的那个,不转换类型的,运行程序依旧不会出错啊。那转换和不转换不就一样了吗?
转换更深层的含义是什么呢?是为了防止什么不可预测的错误吗?还是增加程序的可移植性?
或者是其他目的? c99标准将malloc函数基类型定为void类型,当吧void指针付给不同基类型的指针变量(或者将某中基类型指针赋给void指针)。编译系统会进行自动类型转换,不必自己写代码
而在c99之前,malloc是char*型的,当将其赋给不同类型的指针时需要强制类型转换 路过看看,不错不错- - 路过瞅瞅,不错 强制类型转换。。。。{:1_1:} 这个问题还比较的像样,malloc就是在堆中开辟空间,你要开辟的空间大小就是那个类的字节数,为何要转指针呢?虽然指针都是一样,只占四个字节,但是他会它的类型而如何去偏移,比如 byte类型,那么指针所指向的值只占一个字节,懂了吧!最后注意释放,不然会内存泄露的.. mark{:5_109:}
页:
[1]