数据结构 类C语言有关操作

元素类型说明


顺序表类型定义

typedef struct{
	ElemType data[];
	int length;
} SqList;//顺序表类型

ElemType是自定义类型,如typedef char ElemTypetypedef int ElemType

typedef struct{
	float p;
	int e;
}Polynomial;

typedef struct{
	Polynomial *elem;
	int length;
}SqList;

数组定义


数组静态分配

typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList;//顺序表类型

数组的空间大小是确定的

数组动态分配

typedef struct{
	ElemType *data;
	int length;
}SqList;//顺序表类型

// 动态分配内存
SqList L;
L.data = (ElemType*)malloc(sizeof(ElemType)*MaxSize)

C语言的内存动态分配


SqList L;
L.data = (ElemType*)malloc(sizeof(ElemType)*MaxSize)

内存分配函数,需要加载头文件<stdlib.h>

  • malloc(m):开辟m字节长度的地址空间,并返回这段空间的首地址
  • sizeof(x):计算变量x的长度
  • free(p):释放指针p所值变量的存储空间,即彻底删除一个变量
  • (ElemType*)决定了开辟的地址空间被划分为多少块

C++的动态存储分配


new 类型名T(初值列表)
功能:申请用于存放T类型对象的内存空间,并依初值列表赋以初值
结果值:
成功:T类型的指针,指向新分配的内存
失败:0(NULL)
如:
int *p1 = new int;
int *p1 = new int(10);

delete 指针p
功能:释放指针p所指向的内存。p必须是new操作的返回值
如:delete p1;

C++中的参数传递


  • 函数调用时传送给形参表的实参必须与形参三个一致(类型、个数、顺序)
  • 参数传递有两种方式
    • 传值方式(参数为整型、实型、字符型等)
    • 传地址:参数为指针变量、引用类型、数组名

传值方式
把实参的值传送给函数局部工作区相应的副本中,函数使用这个副本执行必要的功能。函数修改的是副本的值,实参的值不变
请添加图片描述

传地址方式——指针变量作参数

  • 形参变化影响实参
    请添加图片描述

  • 形参变化不影响实参
    请添加图片描述

调用完函数m和n就被释放了,交换m和n对a和b没有任何影响

传地址方式——数组名作参数

  • 传递的是数组的首地址
  • 对形参数组所做的任何改变都将反映到实参数组中
    请添加图片描述

注意b[]中不能指明数组大小,因为传的是数组首地址,可以用*b代替
调用完sub(a)后输出为world

传地址方式——引用类型作参数
引用:用来给一个对象提供一个替代的名字
请添加图片描述

j是一个引用类型,代表i的一个替代名,二者是同一个东西,所以地址也是一样的
i值改变时,j值也跟着改变,所以会输出i=7 j=7

请添加图片描述

m是对a的引用,n是对b的引用
所以对m的任何操作也是对a的操作,因此交换mn的值也就是交换ab的值

引用类型做形参的三点说明

  1. 传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化
  2. 引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好
  3. 指针参数虽然也能达到使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,容易产生错误且程序阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。

后面较多使用引用类型作参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值