数据结构自学第一周总结:C语言与C++内容预备

本文总结了数据结构自学第一周的内容,包括动态存储的malloc函数和new运算符的使用,深入探讨了C++中的指针概念、函数调用的数据传递方式,以及结构体和类型定义的基础知识。
摘要由CSDN通过智能技术生成

1. 动态存储

在数据结构与算法的学习过程中我们常常要用到动态存储方式。

1.1 malloc函数

1、其作用是C语言在内存的动态存储区中分配一个长度为size的连续空间。函数的返回值是分配区域的起始位置,或者说,此函数为指针型函数指向该分配域的开头位置;
2、如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,用free()函数将内存块释放;
3、在调用malloc函数动态申请内存块时,一定要进行返回值的判断,在使用时,如果source code 中没有直接或间接include过stdlib.h那么gcc就会报错。

 int *p;
 p = (int *)malloc(sizeof(int));

1.2 new运算符

new运算符使用的一般格式

 new   类型(初值)/new   类型[大小]      //用new分配数组空间不能指定初值

如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户根据该指针的值判断分配空间是否成功。

new int//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址
new int[100];//开辟一个存放整数的空间,并指定整数的初值为100,返回该存储空间地址
new char[10];//开辟一个存放字符数组的空间(包含10个元素).返回元素首地址
float *p=new float[3.14159];//开辟一个存放单精度数的空间,并指定初值,将地址赋给指针

释放内存空间delete一般格式

 delete   [ ]指针变量 /delete 指针变量     //指针变量前面加一对方括号表示是对数组空间的操作
delete p;//撤销上面第四个例子这个空间;
delete []pt;//把new char[10] 中的地址赋给变量pt,如是释放内存空间;

1.3 new与malloc的区别

new返回指定类型的指针,并且可以自动计算所需内存大小,而malloc必须由我们计算字节数,并且返回后强行转换为实际类型的指针。;另外,malloc只管分配内存并不能对所得的内存进行初始化,所以在得到的一片新内存中,其值是随机的。

2. 指针

2.1 什么是指针和指针变量

指针:一个变量的地址称为该变量的“指针”

i_pointer=&i;//i的指针的值为2000;
*i_pointer=50;

指针变量:一种特殊的专门存放地址(即指针)的变量称为指针变量,比如i_pointer。

2.2 定义指针变量

int *p1,*p2;//类型 *指针变量名
·int是指针变量指定的“基类型”;
·基类型指定指针变量可指向的变量类型;
·p1,p2是指针变量名而不是*p1,*p2。
int a;int *p;float b;
p=&a;//正确赋值
p=&b;//错误赋值,类型不对

2.3引用指针变量

·给指针变量赋值,如:p= &a ;  //使p指向a
·引用指针变量所指向的变量,如:有p= &a;*p=1;则cout<<*p;//输出1,*p相当a
·引用指针变量的值,如:cout<<p;//以十六进制输出a的地址
辨析:i_pointer——指针变量,它的内容是地址值;
     *i_pointer——指针的目标变量,它的内容就是数据;
     &i_pointer——指针变量占用内存的地址

2.4 安全使用指针变量

·初始化指针变量:指针变量如果不赋初值,其值是随机的。因此先赋空值 int *p; p=NULL;或p=0;	
·在使用指针前,先判断再访问,if(p!=NULL)或if(p)。   

2.5 指针和数组

通过指针引用数组元素:假设a是数组名,p是指向数组的指针变量,其初值是a。
(1)下标法:a[ i ];p[ i ];
(2)地址法:*(a+i)或 *(p+i);
(3)指针变量法:指针移动,如p++;

2.6 指针变量在单向值传递中的应用

单向传递中,形参相当于复制了一份实参的值,然后在该函数执行完后便删除释放所以一般对实参不会造成影响。但是指针变量赋值后指向同一个地址,对形参的改动会被保留下来也就影响了实参。

3. 函数调用的数据传递

3.1 两种数据传递方式

函数之间的数据传递是靠参数进行,分为传值调用和传址调用:
·普通变量作形参——传值:函数并非对实参进行操作,而是将实参的值传递给形参,对一个形参的操作,操作完后常用return语句返回一个值(即操作结果),而实参并未影响;
·指针(或引用)变量作形参——传址:取实参所指向的地址给形参,函数操作的是地址里面的内容,因此实际上是对实参本身进行操作。

3.2 引用

C++中用引用来替代函数中作形参的指针变量。所谓引用,是为变量创建的一个别名,并未增加新变量定义: 类型说明 & 引用名 = 被引用变量名;

int &A = B; //A是B的引用;

含义:即A和B指的是同一个内存地址中的内容,两个变量的值总是相同,一个变量的赋值总是影响另一个变量的。

3.3 函数定义格式上的区别

值传递在定义处是:swap(int x,int y);
引用传递在定义处是:swap(int &x,int &y);
数组作为函数参数,函数调用时,实参为不带方括号的数组名。实际传递就不是数组本身的元素,而是数组的首地址,属于传址调用,可以直接修改数组元素本身的值。

4. 结构体定义

(1)一般格式 :struct 结构名 { 结构成员说明表;};
(2)两种定义结构变量的方式:
a) struct staff{…}a,b.c;
b) struct staff{…}; struct staff a,b,c;或 staff a,b,c;

5. 类型定义

typedef int ElemType; //int处为可更换的任意基础类型,ElemType是定义新类型名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值