地址、指针与动态内存分配

(1)   地址 01.cpp
 
C/C++ 程序运行时,各种数据类型(常量,变量,函数,数组,结构,对象等)在内存中都有地址,知道地址即可取得它们的内容,可用“取地址操作符” & 得到地址
 
2 指针
 
指针是存放另一变量地址的变量;在 C/C++ 中,说明它的一般形式为 : " 数据类型  * 指针名 "
指针说明时的数据类型不是指针变量本身的类型,而是指针指向的目标的数据类型;
   例如 int *p 是说在地址 p 处的 int 型变量   
指针操作符有 & *; & 后跟变量名 , 其作用是返回被操作变量的内存地址 ; * & 的逆运算 , 其操作对象是指针表达式 , 并返回指针表达式所指内存单元中的值 . 例如 :
    int I; int *p; p=&I;
是把变量 I 的地址赋给指针变量 p.
4     可以把一个指针的值赋给另一个指针 ; 指针可同整数加减 ; 不能对两个指针进行加减 , 更不可乘除 ; 两个指针可以进行比较 .
 
 
3 指针的声明与赋值 02.cpp
 
指针需先声明方可使用,而在使用之前,必须给指针赋值
 
4 函数的传值与传址调用
 
 
int sum1(int n); int sum2(int *n);       // 计算 1+2+...+n 的两个函数
 
 
 
5 指向函数的指针:
 
0530.cpp 多重指针: 指针 **p 指向某个单指针的地址(是指针自己的地址,不是指针指向的地址)
0533.cpp 定义动态数组实现:用户输入一个数max,输出从0到max间的所有整数
0534.cpp 在函数内改变结构的成员,要把一个指向结构的指针作为函数参量,在函数内使用:pointer->member,或:(*pointer).memeber 的方式引用结构指针的成员
 
(6) 数组、字符串,指针数组与数组指针,结构
 
数组名即表示数组的首地址 ; 不带下标的数组名是指向数组的指针,表示数组的开始地址,例如: char str[60], *p; p=str;
 
数组名 str 产生指向数组第一个元素的指针;也可用 & 得到数组第一个元素的地址: p=&str[0];
可用 *(p+4)='b'; str[4]='b'; 为该数组的第五个元素赋值。可用三种方式说明数组,例如: int x[10]; int *x;  int x[ ];
 
C/C++ 中,用以 AscII 值为 0 的空字符结尾的字符型数组来定义字符串 (因此,应该用 char str[k+1] 来说明长 k 的字符串); 见:Pointers.C); 例:
 
0501.cpp 用指针遍历数组(显示字符串函数)
0529.cpp 指向函数的指针与返回值为指针的函数
0530.cpp 3 重指针参数的函数
0531.cpp 指针函数与 :: 调用函数
0532.cpp 指针数组: 与返回值为指针的函数类似,可以建立指针数组(元素为指针类型的数组),主要用来存放字符串(指向字符串的指针),例如: char *letters[3]={“AA”,”BB”,”CC”}; 编译器如下存放这个数组:        A A /0 B B /0 C C /0          (注意:与字符串不同,不用 NULL 结束)
指针指向每个(这里是 3 个)字符串的开头。
0533.cpp 数组指针: 数组指针例如: int (*array)[10] 是指向具有 10 个元素的 1 维数组的指针。
0534.cpp 指向结构的指针: 两种调用指针成员的方式
 
7 )动态数组、动态内存分配
 
程序运行期间动态建立而不是通过数组说明建立的数组称为动态数组;建立动态数组要使用 stdlib.h 中的库函数 malloc free 来分配和释放内存单元;例如要建立一个 double 类型的动态数组,先要说明一个指向 double 对象的指针: double * pd; 然后由下面语句建立所需大小(例如 100 )的内存空间,并让指针指向这个空间: pd = (double ) malloc(100*sizeof(double)) 。当无足够连接的内存时,分配失败,返回空指针 (NULL,0)
 
程序06.cpp 动态给出两个大数组相加( Windows 使用虚拟内存模式,突破 64K 限制);
程序07.cpp 用户输入一个数 max ,输出从 0 max 间的所有整数,及其平方,立方和 4 次方:用二维动态数组实现,注意: int (*pi)[4]; 定义动态数组,它是个 2 维数组,行数是 max+1 ,列数是 4
程序08.cpp 一维方式实现二维数组(上一程序的另一种编法)
程序10.cpp 由月份数查询它的英文名;
程序11.cpp   口令验证:实现键盘输入口令,用 * 号掩盖;
程序12.cpp 排序(数组参量);
程序13.cpp :求二维随机( 3x4 )数组 A 中最小元所在的行、列:
程序14 使用动态内存分配读取 FoxPro 数据库数据;
 
    学习数组的定义、初始化、赋值和使用的方法
    学习给函数传递数组的方法
    学习指针和引用的定义和使用方法
    学习字符串的使用方法
    学习用指针和引用给函数传递参数
 
《作业 1 》用动态内存分配修改 2^n 和大整数的计算,使它通用化;要求:不使用静态数组,而仅使用指针
《作业 2 》计算圆周率到小数点后 n 位( 参看pi-研究
《作业 3 》随机生成 k 个长 n 的二进串( k.n 由键盘输入),将它们转换为整数(注意: n>32 时怎么办)(可用 BITSET
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值