比如下面的程序
#include
#include
typedef int ElemType;
void insert(int i ,ElemType& e)
e=45;
}
main()
int e=3;
insert(0,e);
printf("after call insert e=%d",e);
//system("pause");
最后打印出来的是e=45,而将void insert(int i ,ElemType& e)改为void insert(int i ,ElemType e)最后打印出来的就是e的原始值e=3。
c语言数据结构#include"stdafx.h"#includl.elem是一个动态数组 已经定义过了 在结构体里面。初始化的时候为它分配了一段连续的内存空间
L.elem=(Elemtype*)malloc(List_INIT_SIZE*sizeof(Elemtype));
其它用法跟数组一样。
一般数组在程序开始执行的时候就已经分配了一段固定的连续内存空间,而动态的数组只要使用前申请 使用后回收。
C语言elemtype我理解你说的意思是不是想让elemtype可以替换任意一种类型?
如果是的话,这种东西叫做模板,它是C++的内容,不在C语言的范畴内。
具体用法是:
template
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist;
之后声明变量时要赋予elemtype一个已知的类型,比如int。
struct sqlist a;
对于a这里面的elemtype就变成了int。
不过这是C++的内容,C里面不能用。
如果不用模板,而必须在C语言里用的话,有两种方法。
1. 之前声明它
typedef int elemtype;
2. 之前预编译它
#define elemtype intmakenode(link *p, elemtype e)
按照字面理解, 是制造一个节点, 也就是通过这个函数可以申请到一个节点, 并用e去赋初值(一般都是动态内存开辟来申请节点)
看看是打错了还是什么,link &p这里, c语言中没有引用的
给出p, 应该是在p指向的节点之前插入新节点, e就是自己要插入的值了, elemtype 可以换成int float之类的,
具体的还要看链表节点的具体定义, 只有一个函数声明看不出什么的在typedef struct之前加上 elemtype 的定义,例如:
typedef char elemtype;
sizeof(ElemType)这是什么意思?为什么会在sizeof函数里面加一个数据类型ElemType?sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 2(16位机),4(32位机),8(64位机)
sizeof(long) = 4(不****位机是多少)
这些其实是每种变量类型所占用的内存的字节数。
malloc()中传入的参数是内存大小,单位为字节。
如果你要定义一个 short 的,元素个数为7的数组,当然就需要 7*2个字节的内存大小。
如果ElemType是结构,也是同理。sizeof 是c语言中判断一个对象或者类型所占的内存字节数的关键字。
既然是关键字那么
int a;
printf("%d%d", sizeof a, sizeof(a));//都是合法的
sizeof(类型)用来计算类型所占的字节数sizeof(ElemType)就是计算ElemType的大小,比如32位*作系统下sizeof(int)就是4,sizeof(char)就是1.
(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype))就是申请LIST_INIT_SIZE个Elemtype对象大小的内存然后转换为Elemtype *指针。比如int *a = (int *)malloc(10*sizeof(int)),就是申请连续的10个4字节(总共40个字节)空间,并将其首地址赋给a。sizeof(ElemType) 是表示取得ElemType的内存大小。malloc动态分配空间,分配一个ElemType大小的空间。编写无错的c程序的秘诀的电子版;} } 至于malloc,一般的做法是分配size个字节的内存时,多分配一个调试用的结构体一般的做法是把malloc和free包装以后使用。比如:free(p)包装一个函数: void free(void *p) {if (p ,再加入适当的调试代码。可以参考!= null) {free(p);p = null