c语言一个问题,在线等

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
(中间省略)

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

这是数据结构刚学到的一个地方,这句话怎么理解?或者说我要怎样才会用这句话?
1、L.elem中点.elem是怎么用的?
2、malloc和sizeof那个是固定格式吗?它的格式是怎样的?
3、那个*号是什么意思啊?
4、还有ElemType我知道是元素类型的意思,结合到这句话里就感觉有点懵。。
求大神指教,在线等。。

第1个回答  2015-04-06
1.意思是给L.elem分配一片地址。地址用malloc函数来分配。
2.因为L.elem是ElemType*型的指针,所以要强制类型转换才能把分配的地址给L.elem。(ElemType*)就是强制类型转换。
3.分配多大的空间??要分配n个sizeof(ElemType)大小的空间,n是几?n是LIST_INIT_SIZE。
所以就是分配(LIST_INIT_SIZE*sizeof(ElemType))个字节的空间。
4.总结来说,就是分配LIST_INIT_SIZE*sizeof(ElemType)个字节的空间,并将这个空间的首地址强制转换为ElemType*型,然后赋值给L.elem.
空间首地址 malloc(申请空间大小)
专业一点是:void *malloc(size_t size);看不懂也无所谓....
求采纳。
第一个*表示指针,第二个*就是乘号。
第2个回答  2015-04-06
L是个结构体变量,L.elem是引用结构体成员变量elem

malloc 是给一个指针变量申请内存空间

其函数声明(原型)为:void *malloc( int size ) ;
参数size是申请的空间的大小,返回值是指向申请成功的空间的地址

LIST_INIT_SIZE*sizeof(ElemType) 这里的*是乘号(x)

(ElemType*) 这里的*是表示指针

前面的(ElemType*)是用来标明返回值类型,是个强制转换,因为malloc函数原型返回值类型是(void *),所以,为了正常赋值,需要进行强制转换
第3个回答  2015-04-06

    .elem 是结构体中的一个变量,详见C语言

    malloc是申请一块内存区域,sizeof(ElemType)是结构体ElemType的大小

    *表示指针

    如果我没猜错,你的结构体是这样定义的:

struct AAA

{

    ElemType*  elem;

};

.......

AAA L;

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

这句话的意思是给elem申请一块LIST_INIT_SIZE大小的内存区域,elem指向这块内存区域。

本回答被提问者采纳

C语言问题求解,在线等,急!!!
1、根据题意每天从区间1~N中,依次深度-1,遇到某个深度0时停止作业,所修改的区间就是当日作业区间。2、独立函数实现一天作业(workForDay)。参数flag为1显示作业过程,如不需要传0。3、init函数为输入并返回动态数组。include <stdio.h> include <malloc.h> int len=0;\/\/路面长度 int *init(...

C语言问题简单的很,菜鸟送分,在线等,超级高分,给我讲明白,否则关闭问题...
p--; \/\/令p指向字符串中的前一位 \/\/此时,p指向了字符串的最后一位 for( ; t > 0 ; t-- ) \/\/从后往前输出字符串的每一位,t每减小1就输出了一个字符,t=0的时候恰好每一位都已输出 { printf("%c",*p);p--; \/\/令p指向字符串的前一个字符 } printf("\\n");} ...

C语言基础填空题,在线等,要详细步骤和解题思路?
第二题: 答案:j=3,i=4 do{ j++; } while(i++<3); 此语句 是先循环 再检查条件 和上一题不同。初始化值:int i=1,j=0;第1次循环:先执行j++, 然后 求表达式 i<3 ,为TRUE,最后i+1,执行结果:j=1,i=2;第2次循环:先执行j++, 然后 求表达式 i<3 ,为TRUE,最后i+1...

C语言编程求解在线等。谢谢。
int ictn = strlen(strin.c_str());for (int i = 0; i < ictn; i++){ if (strin[i] == '+' || strin[i] == '-' || strin[i] == '*' || strin[i] == '\/'){ flg = strin[i];string strfst = strin.substr(0, i);string strsec = strin.substr(i+1, ictn)...

用C语言编写一个程序,在线等
include <stdio.h>void main(){ int x,y,z; printf("请输入三个数字"); scanf("%d%d%d",&x,&y,&z); if(x+y==z) { printf("%d+%d=%d",x,y,z); } else { printf("%d+%d!=%d",x,y,z); }}

c语言 在线等
第一题:include <stdio.h>int f(int b[], int n){ int i,r; r=1; for(i=0;i<=n;i++) r=r*b[i]; return r;}main(){ int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3);printf("%d\\n",x);}运行结果:120 ...

C语言作业,在线等,答案正确直接满意,求程序 一个数恰好等于它的因子之...
include <stdio.h> void main( ){ int a, x, s, i;scanf("%d", &a);for(s = 1, x = a, i = 2; i < x; i++){ if(x % i == 0){ x \/= i;s += i + x;} } if(a == s) printf("yes\\n");else printf("no\\n");} ...

c语言编程realloc的问题,在线急等,高分相送
{ int j,*a=NULL,*p;for(int i=0;i<10;i++){ a=(int *)realloc(a,(i+1)*sizeof(int)); \/*其他都没改,就这里改了点,已经可以实现动态数组增长*\/ a[i]=i;printf("%d\\n",a[i]);} for(i=0;i<10;i++){ printf("%d\\n",a[i]);} free(a);} realloc(void *mem_...

c语言,在线等!!一个球从N米(0<N<100000)的高度落下,每次落地后反弹回原...
include<stdio.h> define F(x) x*x-3 void main(){ float sum=0;float h=100;int n;int i;printf("Please type in n:");scanf("%d",&n);sum=h;for(i=2;i<=n;i++){ sum+=h;h=h\/2;} printf("总路程为:%f\\n",sum);} 我算了1个小时,一定要采纳哦!

C语言 求助。在线等 输入一个字母(大小写均可),输出以这个字母为起始的...
include<stdio.h>main(){ char a; int i,b; while(1){ scanf("%c",&a); getchar(); for(i=0;i<26;i++){ b=a+i; if((a>='a'&&a<='z'&&b>'z')||(a>='A'&&a<='Z'&&b>'Z')) b=b-26; printf("%c",b);}printf("\\n")...

相似回答