第六章 指针、引用与动态内存分配
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§6.1 导出数据类型(2)——指针
三、指针与数组
比较指向数组元素的指针和指向数组的指针
例 folat *p=&A[0][0]; float (*pa)[4]; pa=A;
相同点:p和pa指向同一地址 不同点:p指向一个整型下标变量A[0][0],
所占空间2字节; pa指向一个整 型一维数组A[0],所占空间8字节。
§6.1 导出数据类型(2)——指针
四、字符串指针 2、字符串指针数组
例
char *menu[ ]={“File”, “Edit”};
menu 0067:4400 0088:2251
0088:2256
0088:2251 F 0088:2252 i 0088:2253 l 0088:2254 e 0088:2255 \n 0088:2256 E 0088:2257 d 0088:2258 i 0088:2259 t 0088:225A \n
§6.1 导出数据类型(2)——指针
一、指针变量说明
2、指针的初始化
⑴&操作符:&称为取地址运算符,用&可以 获取变量的地址,指针变量用 于存放地址。
例
int *iPtr; int iCount=18; iPtr=&iCount;
iPtr 0000:F822
iCount
0000:F822
18
§6.1 导出数据类型(2)——指针
一、指针变量说明 2、指针的初始化 ⑵ *操作符:
例 #include<iostream.h> { int *iPtr; int iCount=18; iPtr=&iCount; cout<<*iPtr<<endl; }
* 既是乘法运算符,又可以用于定义指 针,这里还可以用于指针的间接引用,称为 取内容运算符或间接运算符。
q=p;
§6.1 导出数据类型(2)——指针
二、指针的运算 1、赋值运算
2、一个指针可以加上或减去一个整数值,包括 加1或减1运算。
3、在一定条件下,两个指针可以相减。 4、在一定条件下,两个指针可以相比较。
§6.1 导出数据类型(2)——指针
三、指针与数组
1、指向数组元素的指针
例 int n[10]; int *pn=n; //指针pn指向数组n的首元素n[0]
strcpy(b符uf串fe1r原1, 来“H的el内lo”容); 返回//b值uf:fer字1足符够串长1的,可地以址放得下字符串和结束符 strcpy(buffer2, buffer1);
§6.1 导出数据类型(2)——指针
四、字符串指针 3、利用字符串指针的标准函数
③字符串连接函数strcat( )
cout<<*iPtr<<endl;
cout<<&iPtr<<endl;
}
iPtr
iCount
0067:FE00
0067:FDFC 0067:FE00
58
§6.1 导出数据类型(2)——指针
一、指针变量说明 2、指针的初始化 ⑵ *操作符:
说明 ④ 引用运算符与地址运算符虽然使用相 同的符号,但它们是不一样的。
char *strcat(char *str1,char *str2); 功能:把字符串2连接到字符串1的后面 注:要保证存放第一个字符串的数组足 以存放两个字符串及结束符的合并。 返回值:字符串str1的地址
③字符串连结函数strcat( )
#include <iostream.h> #include <string.h> int main( ) {
int strcmp(char *str1,char *str2); 功能:按字典序比较两个字符串的大小
返回值:根据两个字符串的大 小,返回正整数、0和 负整数
④字符串比较函数strcmp( )
有n[i] *(n+i) 与此相应的有:
pn[i]
*(pn+i)
&n[i] n+i &pn[i] pn+i
§6.1 导出数据类型(2)——指针
三、指针与数组 2、指向数组的指针
<类型名> (*<指针变量名>)[<数组元素数>]; int (*pa)[4];//表示pa是指向一维数组的指针
例 假设float A[2][4]; float (*pa)[4]; pa=A; pa++; //pa指向一维数组A[1]
{ cout<<“Enter week No.:”; cin>>week; if(week<1||week>7) break; cout<<“Week No.”<<week<<“ is ”<<name[week]<<endl;
} }
§6.1 导出数据类型(2)——指针
四、字符串指针 1、说明与初始化
第六章 指针、引用与 动态内存分配
导出数据类型(2)——指针 指针与动态内存分配 导出数据类型(3)——引用
§6.1 导出数据类型(2)——指针
一、指针变量说明 1、定义指针变量 格式:<类型名> *<指针变量名>
例 int *pi;
//pi是一个指向int型变量的指针
char *pc;
// pc是一个指向char型变量的指针
void main( )
运行结果:
{ int iCount=18; int *iPtr=&iCount; *iPtr=58; cout<<iCount<<endl; cout<<iPtr<<endl;
58 0x0067fe00 0x0067fe00 58 0x0067fdfc
cout<<&iCount<<endl;
buffer A B C \n
pc
h e l l o \n
pc pc
#include <iostream.h> void main( ) { char buffer[5]="ABC"; char *pc; pc="hello"; cout<<pc<<endl; pc++; cout<<pc<<endl; cout<<*pc<<endl; pc=buffer; cout<<pc; }
§6.1 导出数据类型(2)——指针
三、指针与数组 3、指针数组 <类型名> *<数组名>[<元素数>];
<类型名> *<数组名>[<元素数1>] [<元素数2>]…;
例 int a,b,c,d,A[2][4]; int *p1[4]={&a,&b,&c,&d}; int *p2[2]={A[0],A[1]};
int &rInt=intOne; int *ip=&intOne; cout<<&ip;
§6.1 导出数据类型(2)——指针
一、指针变量说明 2、指针的初始化
⑵ *操作符:
说明 ⑤ 与指针类似,下面的三种声明引用的方 式都是合法的:
int &rInt=intOne; int& rInt=intOne; int & rInt=intOne;
int strlen(char *str); 功能:求出已知字符串的长度。 返回值:字符串str的长度,不包含串尾符。
①字符串长度函数strlen( )
#include <iostream.h> #include <string.h> int main( ) {
char *string1=“four”; cout<<“The length of string is:”
char (*pa)[3]; //pa是一个指向一维数组的指针
int (*pf)( ); //pf是一个指向函数的指针
int **pp;
//pp是一个指向指针的指针
§6.1 导出数据类型(2)——指针
一、指针变量说明
1、定义指针变量
格式:<类型名> *<指针变量名>
说明 ① ② ③ ④ ⑤、每 一 指 定 在一个针义指个指是名针指针变为定针变量义iPt变量,中r的量所,指都占以一针有的凡个可一内可*只以个 存 声能写相 空 明表成应 间 变示:的 大 量一类 小 的个 指针型 与 地 i。nt(一方如* v个,:ioPi内就dtr存可;*指地声针址明(除所指*外靠占针)左空变,)间 量该相 。类等型。用即以 说 一 iinnt明个t i这*n*itcP个型otur指指;nt针针Pt变变r(,量量*c靠所o与u右指一nt)向;个的声do地明ub址le中型 coun指存 itnP针tt放r变为*数量整据iP占型的tr用指;数同针据(样,类*大声两型小明边。的c都ou内不n存靠t为空)整间型。, 而不是整型指针。
p1是由四个整型指针组成的指针数组,p2中的A[0] 和A[1]分别表示A[0][0]和A[0][1]的地址。
§6.1 导出数据类型(2)——指针
三、指针与数组 3、指针数组 <类型名> *<数组名>[<元素数>];
<类型名> *<数组名>[<元素数1>] [<元素数2>]…;
比较
int *p; p是指向整型变量的指针 int *p1[2]; p1是由两个整型变量组成的指针数组 int (*p2)[4]; p2是一个指向一维整型数组的指针
<<strlen(string1)<<endl; return 0; }
输出结果: The length of string is:4
§6.1 导出数据类型(2)——指针
四、字符串指针 3Baidu Nhomakorabea利用字符串指针的标准函数
②字符串复制函数strcpy( )
char *strcpy(char *str1,char *str2); 例 c功ha能r :bu把ff字er1符[1串0]2, 拷bu贝ffe给r2字[1符0];串1,覆盖字
§6.1 导出数据类型(2)——指针
练 编程实现输入星期几的数字,则输出该数字对应的英文名.
#include <iostream.h> char *name[ ]={“ ”, “Monday”, “Tuesday”, “Wednesday”,
“Thursday”, “Friday”, “Saturday”, “Sunday”}; void main( ) { int week; while(1)
§6.1 导出数据类型(2)——指针
练
使用字符
串指针编程,
将其每个字符
加1后生成新的
字符串,再将
其还原为原字
符串。
结果: J!bn!b!ufbdifs/ I am a teacher.
#include <iostream.h> void main( ) {char *p1,a[16],b[16]; p1=“I am a teacher.”; for(int i=0;i<15;i++)
a[i]=*p1+++1; a[i]=‘\0’; cout<<a<<endl; for(i=0;i<15;i++)
b[i]=*(a+i)-1; b[i]=‘\0’; cout<<b<<endl; }
§6.1 导出数据类型(2)——指针
四、字符串指针 3、利用字符串指针的标准函数
①字符串长度函数strlen( )
§6.1 导出数据类型(2)——指针
一、指针变量说明 2、指针的初始化
⑶ NULL指针 一个指针变量可以被赋以空 值,表明它不指向任何一个 对象。
例
int *p=NULL;
§6.1 导出数据类型(2)——指针
二、指针的运算
1、赋值运算
可以将一个指针所指向的变量的地址值 赋给它,也可以将一个数组或者函数在内存 中的入口地址值赋给对应的指针,还可以将 一个已被赋值的指针赋给另外一个相同类型 的指针。 例 int a,*p=&a,*q;
间接引用时,可获得由该指针变量指向 的变量的内容。
§6.1 导出数据类型(2)——指针
一、指针变量说明 2、指针的初始化 ⑵ *操作符:
说明
例 #include<iostream.h> { int *iPtr; int iCount=18; iPtr=&iCount; cout<<*iPtr<<endl; }
① ② ③ 指非*放针指在是针可变执量行,是语是不句能变中用量的就间指具接针引有之用内前存操,地作称址符, 为的 故间, 指接因 针引为变用量*只操本能作身作符也用;有于*地放地址在址。指。针如定:义中, c称ou为t<指<*针iC定ou义n符t; 。//error
#include<iostream.h>
char s1[20]=“Happy ”; char s2[ ]=“New Year”; cout<<strcat(s1,s2)<<endl; return 0; }
输出结果: Happy New Year
§6.1 导出数据类型(2)——指针
四、字符串指针 3、利用字符串指针的标准函数
④字符串比较函数strcmp( )