配色: 字号:
《C语言程序设计》11 内存管理写字字帖
2023-05-24 | 阅:  转:  |  分享 
  
第 十一 章内存管理12回顾函数的作用函数的声明格式和各部分作用函数中的实参和形参的区别函数的调用3回顾字符信息在计算机中的描述字符信息的存
储方式字符信息的处理函数4目标了解内存地址、指针的概念理解指针和数组之间的关系掌握指向一维数组的指针操作5内存地址数据类型的不同,
每个变量需要分配的内存单元数目也不同 每个变量都需要分配连续的内存单元 int i=3;Int j=5;float f 字符型变量
需要占用1个内存单元;短整形变量需要占用连续的2个内存单元;单精度变量需要占用连续的4个内存单元;双精度变量需要占用连续的8个内存
单元。6变量与地址当变量只占用一个内存单元时,内存单元的地址就是变量的地址;当变量占用连续的若干个内存单元时,最前面一个单元的地址
就是该变量的地址,这一地址称作为首地址。int i=3,j=5,float=f; 7数组与地址当一个数组占用连续的若干个内存单元时
,最前面的单元地址称为数组的首地址,也是第一个数组元素的地址,通常用数组名代表数组的首地址 数组占用的总单元数等于数组长度每个数
组元素占用的内存单元数对一个数组来说,所分配的内存单元必须是连续的,并且是按照顺序对应数组元素的 int [3]={1,2,3};
数组元素 a[i]的地址=数组首地址+i 数组元素的数据类型所占用单元数数组元素a[1]的首地址:3000+12=3002
8指针指针是一种数据类型,专门用于存放内存地址。按照这一类型可以定义相应的变量,这个变量就是指针变量,变量中存放的数据就是地址地址
的宽度是固定的32个二进制位,所以指针变量占据的宽度也是固定的4字节数据类型 指针名=初值数据类型不是指针变量中存放的数据类型,
而是它将要指向的变量或数组的数据类型 定义成某种数据的指针变量,将来只能用来指向同种数据类型的其它变量或数组 运算符是指针运算符
在此地作用是将一个变量声明为指针变量。“初值”通常是“&普通变量名”、“&数组元素”或“数组名” 9指针先定义了整形变量a,然后定
义一个指向整形变量的指针变量p,并赋初值为事先定义的变量a的地址,即指针变量p指向整形变量a,指针变量p中存储着变量a的首地址 i
nt a;Int p=&a;1000H 10指针float f1,f[10];float p1=&f1;float p2=f
; 先定义单精度形变量f1和数组f;然后定义一个指向单精度形的指针变量p1,并为其赋初值,使其指向变量f1,即指针变量p中存储着变
量f的首地址;最后再定义一个指向单精度形的指针变量p2,并为其赋初值,使其指向事先声明的一维数组,即变量p中存储着一位数组的首地址
。 pointer_1=100;pointer_1为指针变量,100位整数11指针变量的引用方式int i=10;int p_i
;p_i=&i;printf(“通过指针来操纵数据,显示变量i的值:%d”, p_i); 1000H 10iP_i通过指针来操纵
数据,显示变量i的值: 101000H12指针变量的引用方式int i;int p_i;p_i=&i;p=123;printf
(“变量i的值:%d\n指针所指向的值:%d\n”,i,p); 指针变量一旦声明赋初值后,就可以替代它所指向的变量 。 1000
H 123iP_i通过指针来操纵数据,显示变量i的值: 1231000Hint i;int p_i;p_i=&i;p=123;
printf(“变量i的值:%d\n指针所指向的值:%d\n”,i,p); 指针变量一旦声明赋初值后,就可以替代它所指向的变量
。 123iP_i13 指向数组元素的指针指针变量指向数组元素,即某一元素的地址放到一个指针变量中 int a[10];
//定义a为包含10个整形数据的数组int p; //定义p为指向整型变量的指针变量p=&a[0]; //把a[0
]元素的地址赋给指针变量p,也就是说,p指向a数组的第0号元素 14指向数组的指针在声明数组时,实际上是声明了一个指针,这个指针保
存了一个连续空间的首地址,这个指针就是数组名 和普通指针不一样的一点在于,数组名中保存的地址是恒定不变的,而普通的指针变量中保存的
地址是可以改变的 int a[10];int p=a;int x;p=&x;int a[10],b[10];a=b;1000H
aP1000H2000H x2000H15指向数组的指针的移动指针变量p已指向数组中的一个元素 则可以通过指针自加来访问数组中的其
它元素:p+1指向同一个数组中的下一个元素。 int a[10];int p=a;int x=(p+2)例如数组元素是实型,每
个元素占4个字节,则p+1所代表的地址实际上是p+1d,d是一个数组元素所占据的字节数1000H a2000H P+2x(p+
5)=(a+5)=a[5]16指向字符串的指针第一种方法是给指针变量赋初值的方式,格式为“指针变量=字符串常量” 第二种方法是
先定义一个字符型指针变量,然后再赋值的方式,其格式为“指针变量=字符串常量”。char p=“ABCDE”char p; p=
“ABCD”1000H 匿名P1000H17指向数组的指针示例判断所输入的字符串是否是数字字符串 #include "stdafx
.h"#include "string.h"void main(){ char p1="0123456789"; char a[
100];/指针p2指向数组中第一个元素的首地址,也可写成char p=a效果是一样的,只是含义有所不同,代码中指针式指向数组
中元素的,而char p=a是指向数组的。/ char p2=&a[0]; /设标
志位初值0,代表不为数字。/ char flag=''0''; printf("请输入待处理的字
符串\n"); gets(a);18指向数组的指针示例while(p2!=''\0'') //p2指针所
指向的数组中的元素是否为字符串结束标记{ while(p1!=''\0'') //p1指针所指向的数组中的元
素是否为字符串结束标记 {/如果两个指针所指向的元素相同,即输入字符串中的当前元素为数字,那么跳 出内层循环,读取下一个待比
较的元素/ if(p2==p1) { flag=''1''; break;} p1++
; //p1指针移动到下一个元素 }if(flag==''0'') break; p2++
; //p2指针移动到下一个元素19指向数组的指针示例 } if(fl
ag==''1'') printf("所输入的字符串为纯数字串"); els
e printf("所输入的字符串不是纯数字串");} 20指向数组的指针示例输入n个单精度数存入一维数组,用指针变量处理数组元
素的方式将其逆序存放后输出。N从键盘输入。 #include "stdafx.h"void main(){ float a[20]
,x,pb,pe; int n,k,i; scanf("%d",&n); pb=a; for(i=0;i scanf("%f",pb++); //通过移动指针完成数组a元
素的赋值 k=n/2; //设置需要交换的
最大下标21指向数组的指针示例for(i=0,pb=a,pe=a+n-1;i 中最后一个有效元素,a+n-1中a代表数组首地址,n-1即为从0开始到n-1共n个元素/{ x=pb; pb=pe; pe=x; }for(pb=a;pb
献花(0)
+1
(本文系小磊老师首藏)