与C语言中的函数malloc以及链表有关的一个小问题

作者&投稿:平单 (若有异议请与网页底部的电邮联系)
c语言 malloc函数在链表中的用处~

没说是结构体就必须要分配一块内存;
首先,结构体和int char dobule等等一样,也是一种数据类型,无非是有点特殊而已;

那么,按如下 的例子:

char *p = NULL; //p 这个时候只能装指针,也就是一个地址,超过了就错误了。
有时候,我们想将一个字符串拷贝到 p 所指定的地址(不是把字符串的地址给p,注意区别),这个时候就需要有以下三个步骤:
1, 在堆(注意不是栈)上划一个区域,区域大小看你的心情。
2, 然后将这个区域的地址 赋值给 p;
3,循环将一个字符串拷贝到p所指向的区域。

代码就如下:
char * p = (char*)malloc(sizeof(128));memset(p, 0, 128);memcpy(p, src);做个比较,这个时候看 char p 和 char *p 有什么不同?
char p; //是程序自动在栈上分配了空间
char *p = malloc()// 是在堆上分配了空间;

如果是结构体,假设:

struct A {};
A a; //那这个时候,一般来说,就类似于 char p;在栈上分配空间;(但是结构体内部的东西另说);

A *a ;// 这个时候,就类似于 char *p;//有可能你需要手动在堆上分配空间。



简单来说,如果是指针,可能会涉及到malloc分配,非指针的话,就没有malloc一说。

你看你的结构体 定义的变量是不是一个指针型的

什么叫动态申请内存?就是程序运行到某个环节需要增加一个结构体结点时才申请一块内存空间。你那段代码是静态申请的,不管用还是不用,编译时就申请好了;若静态申请的不够用,要临时再申请,你那代码就无能为力了,只好用动态申请函数malloc来完成……

1、struct Student*Create():定义函数Create,函数返回值为指向结构体Student类型的指针。

2、定义结构体:struct Student{……};定义指向结构体的指针:struct Student *p;定义返回值为指向结构体指针的函数:struct Student *Create(){……}
3、malloc函数返回值为void *,pEnd和pEnw的类型为 struct Strudent *,类型不一致,需要对赋值运算符右边的表达式值进行强制类型转换。强制类型转换的方法是(类型名),所以是(struct Student *)。

struct Student*Create() :定义一个函数,函数的返回值是一个结构体的指针。
函数malloc的定义格式是
void *malloc(size_t size);

备注:void* 表示未确定类型的指针,
void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...)
size_t size:用于指明一个整型数据需要的大小
(struct Student*)malloc(sizeof(struct Student));
(struct Student*):是强制类型转换。你看一下强制类型转化的语法就能明白了。


在C语言中,一个函数一般由两个部分组成,它们是——和——
在C语言中一个函数一般由两个部分组成一个是函数头,一个是函数体。函数体是编程语言中定义一个函数功能的所有代码组成的整体。函数体是用花括号括起来的若干语句,他们完成了一个函数的具体功能。函数体内的前面是定义和说明部分,后面是语句部分。函数声明与函数体放在一起组成了函数定义。函数头是指...

c语言中函数的基本单位是什么?
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数。比如在C语言中:int max(int...

C语言中的“void main()”是什么意思?
void main()表示函数无返回值,就是说在程序的结尾处不需要加上return 0。而return是在函数体中,用来返回特定值的。一个C程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,主函数是整个程序的入口。

C语言中允许默认的函数类型是什么
C语言函数有三类,分为外部函数、静态函数、内联函数,其中前两种是C89标准支持,第三种是C99标准增加的。1、外部函数 这类函数是默认的函数类型,基本上平时我们使用的就是这种函数,声明有以下两种方式,例如:\/\/ 使用extern关键字,显示声明 extern int add(int a, int b);\/\/ 或省略关键字extern...

C语言中的标准函数有哪些
C语言输入输出函数有很多,标准I\/O函数中包含了如下几个常用的函数:scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.int getc(FILE *fp)getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为 (ch = getc(fp)) != EOF.EOF为文件结束...

C语言中调用的函数不可以和main函数中的定义的常量变量名同名?_百度...
是的!不可以,不光C不行,C++也不行,我认为其它语言也不可以,如果函数和变量同名在编译的时候如何判断用的是函数还是变量呢?PS:函数在不写函数调用符号时指的是函数的指针,我想这你也应该清楚。

c语言在主函数中输入一个5位数,调用自定义函数分别输出其各位上的数字...
include <stdio.h>void fun(int n){int m=0;while(n){m=m*10+n%10;n\/=10;}while(m){printf("%d ",m%10);m\/=10;}}void main(){int n;scanf("%d",&n);fun(n);}运行示例:

C语言中的#include<stdlib.h>是什么意思
include<stdlib.h>语句是指将 stdlib.h 包含到你的程序里面 。stdlib 头文件即standard library标准库头文件,stdlib 头文件里包含了C、C++语言的最常用的系统函数,该文件包含了的C语言标准库函数的定义。库函数可以理解为工具包,系统已经提供了一些基本的工具供你使用,比如printf函数可以实现输出信息到...

c语言中,当函数的类型与返回值的类型不同时,返回的是什么类型?
返回的还是函数的类型。对返回值做了类型的强制转换。int test(){ float a=3.2;return a;} int main(void){ int b;b=test();printf("b=%d\\n",b);return 0;} 打印的b值是3

c语言中的merge函数
在C语言中,merge函数是一个重要的工具,它被设计用于对已排序的序列进行合并操作。该函数不仅限于合并,实际上涉及到对两个有序的列表进行整合,以形成一个新的有序列表。以下是一个使用merge函数的简单示例:在C++标准库中,merge()函数允许我们合并两个有序的数组或列表,通过自定义或默认的比较规则...

河东区18315024102: C语言中malloc函数的使用方法 -
奚奖益比: C语言中malloc是动态内存分配函数. 函数原型:void *malloc(unsigned int num_bytes); 参数:num_bytes 是无符号整型,用于表示分配的字节数. 返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返...

河东区18315024102: C语言中#include<malloc.h>有何作用?何时要用 -
奚奖益比: 这个头文件里包含了malloc()函数,需要向系统申请内存时要用到malloc函数.那就要加这个头文件,比如建立链表 struct LNode *Init_L() //建立链表 { struct LNode *head; struct LNode *p,*q; head= (struct LNode*)malloc(LEN); if(!head) exit(0)...

河东区18315024102: C语言中怎么使用malloc函数 -
奚奖益比: malloc 是用来申请内存的. 一般都是申请一定个数的某个类型空间,做数组使用. 比如 int *p = (int *)malloc(sizeof(int ) * 10); 就是分配了10个int的空间. 使用后 要记得free(p);

河东区18315024102: C语言用malloc函数定义数组 -
奚奖益比: int* arr; int n = 5; arr = (int*)malloc(n*sizeof(int));然后就定义好了呀,这就是你需要的那种malloc分配空间的数组,使用结束需要释放掉,free(arr).

河东区18315024102: malloc()和calloc()有啥区别 -
奚奖益比: malloc()和calloc()的区别: malloc()和calloc()的功能都是在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针. 而他们之间的区别就是calloc在动态分配完内存后,自动初始化该内存空间为零...

河东区18315024102: C语言中malloc()和calloc()有什么区别? -
奚奖益比: 函数原型:void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t nelem, size_t elsize); 函数声明都在stdlib.h函数库内. malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"...

河东区18315024102: 如何用链表实现malloc函数功能,用c语言? -
奚奖益比: //定义链表结点,包括学号,姓名,和指向下一结点的指针 struct node { int num; int name; struct node *next; }*linklist // 当需要一个结点的时候,就为新结点分配内存空间 linklist p; p=(linklist)malloc(sizeof(struct node)); //结点成员赋值 num=2004; name=Tom; next=NULL; //然后用链表的指针指向该结点p就可以了 //比如有一个指针r指向链表的尾部,可以用以下方法将新结点加如链表中 r->next=p;

河东区18315024102: C语言中的malloc函数用法>?
奚奖益比: 可以用,两者的区别在于,一个是创建静态内存,一个是动态内存. 只是你要做成服务程序或者有基于这个数组的算法时,别忘记用完p之后要free(),并且让p=(int*)NULL

河东区18315024102: 谁能解释下malloc在c语言中的用法? -
奚奖益比: malloc申请的空间是在"堆"上的 平时我们都是用声明变量来申请空间的,此时申请到的空间是"栈"上的 栈上的空间, 不需要程序员负责释放. 例如,在以下函数中 int...

河东区18315024102: C语言中的malloc函数是干什么用的? -
奚奖益比: 动态分配存储空间,动态链表就得用到

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