本文目录
malloc函数问题
void *malloc( size_t size ); malloc函数原型sizeof为运算符 它的格式为 sizeof(里面为任意类型)sizeof运算后的值为size_t类型Stack S=malloc(sizeof *S);这里sizeof *S没见过如果是这样就可以Stack *S=(Stack *)malloc(sizeof(Stack)); 意思为申请了一Stack类型大小的内存空间,把首地赋给S这样也可以long*S=(long*)malloc(sizeof(Stack *)); 意思为申请了一Stack指针类型大小的内存空间,把首地赋给S我们知道指针变量的大小都为4所以有sizeof(任意类型的指针)它的值都为4,它的作用就是申请了4个字节大小的内存空间把它的首地赋给long类型指针,其实就是动态创建了一long类型其实在这里你只要知道malloc函数的作用和原型,理解这个就不困难在来贴个仿malloc函数的活用#include "stdafx.h"#include "stdlib.h"#include "string"#include "stdio.h"int main(int argc, char* argv){double d;//在这里我把这个只当做了80*8个字节的内存空间大小double *t=d;char *s=(char *)t;strcpy(s,"11515615156156156165156"); 640个字节大小空间来装这么小的字符串小菜一碟 printf("%s",s);return 0;}malloc函数它的优点在于可以在程序里面动态创建,大小可以先不确定下来,我上面要确定为640 还有一个优点就是malloc返回值为void *它可以与大多数指针类型转换《函数指针类型例外》我上面要用char *s=(char *)t;来转换
malloc函数中的*号
呵呵,malloc的语法是:指针名=(数据类型*)malloc(长度),这里的(数据类型*)表示指针,malloc函数返回动态内存的地址。p=(LinkList)malloc(sizeof(LNode)) 这里LinkList本身就是一个指针,所以不需要加*了。
c语言为什么有的时候malloc前不加括号
c语言不算强类型,有隐式转换。加不加都没太大关系。malloc返回值是void*你可以用char*int*Buffer*等等一切指针去接受malloc的结果,但是为了不出那个讨厌的warning,也让人看的舒服些,你可以强制转换一下。比如char*p=malloc(100);可以写成char*p=(char*)malloc(100);void*p=malloc(100)不会warning,因为类型匹配
增加链表节点,用malloc函数开辟空间,为什么在malloc前面加(node*)而不是(node
前面加的这个是强制类型转换,正因为malloc返回的是地址,所以才不能写(node)啊。地址其实就是个整数,如何能将一个整数强制转换为一个链表结点呢。而加(node*)是因为malloc返回的地址值是void*类型的,所以需要强制转换一下类型。