




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C程序设计第6章指针 第第6章章 指针指针 本章要点本章要点 n 指针的概念指针的概念 n 数组与指针数组与指针 n 字符串与指针字符串与指针 n 函数与指针函数与指针 n 指针数组和指向指针的指针指针数组和指向指针的指针 n 引用引用 C程序设计第6章指针 6.1 指针的概念指针的概念 1. 内存地址内存地址 计算机的内存储器被划分成一个个的存储单元,计算机的内存储器被划分成一个个的存储单元, 这些存储单元按一定的规则编号,这个编号就是存这些存储单元按一定的规则编号,这个编号就是存 储单元的地址。储单元的地址。 每个存储单元的大小为一个字节,每个单元有每个存储单元的大小为一个字节,每个单元有
2、 一个唯一的地址。一个唯一的地址。 2000 0000 C程序设计第6章指针 2. 变量的地址变量的地址 在程序中定义的所有变量,都要分配相应的存储在程序中定义的所有变量,都要分配相应的存储 单元,不同类型的数据所需要的存储空间的大小不同。单元,不同类型的数据所需要的存储空间的大小不同。 系统分配给变量的内存空间的起始单元地址称为该变系统分配给变量的内存空间的起始单元地址称为该变 量的地址。量的地址。 如如: int I,K; I=3;K=5; 0000 2000 2004 I K 3 5 C程序设计第6章指针 3.内存单元的访问方式内存单元的访问方式 n在程序中一般通过变量名访问在程序中一般
3、通过变量名访问(存取存取)内存单元内存单元. 这种按变量地址存取变量值的方式称为直接存这种按变量地址存取变量值的方式称为直接存 取方式取方式,或直接访问方式或直接访问方式. n间接存取间接存取(间接访问间接访问)方式是指将变量方式是指将变量I的的地址地址 存放在另一个变量存放在另一个变量J中中,通过变量通过变量J访问变量访问变量I的的 值值. 2000 0000 2000 2004 2006 3 5 I K J C程序设计第6章指针 4. 指针与指针变量指针与指针变量 n指针:指针:一个变量的一个变量的地址地址也称为该变量的也称为该变量的指针指针。 n 指针变量:指针变量:用于存储其它变量的指
4、针用于存储其它变量的指针(即地址即地址) 的变量。的变量。 n指针变量的定义:指针变量的定义: 数据类型数据类型 *指针变量名;指针变量名; 如:如: int *p1; float *p2; char *p3; C程序设计第6章指针 6.2. 指针变量的使用指针变量的使用 1.指针变量的赋值指针变量的赋值 n通常把被指向的变量的地址赋给指针变通常把被指向的变量的地址赋给指针变 量量 如:如: int *p1, a=3 ; p1 = int a1; a1=* p1; * p1=5; 注意注意:指针变量必须指向具体内存地址才能引用指针变量必须指向具体内存地址才能引用.如:如: int *p; *p
5、=10; 20003 p1 a 2000 C程序设计第6章指针 例例 通过指针变量存取变量的值通过指针变量存取变量的值 #include void main() int a, *p1; double b, *p2; char c, *p3; p1 = p2 = p3 = *p1 = 10; *p2 = 11.2; *p3 = A; cout a endl; cout b endl; cout c endl; 10 11.2 A 100 x2000 ap1 11.20 x2004 bp2 A0 x200C cp3 C程序设计第6章指针 例例6.2 输入输入a和和b两个数,按从小到大的顺序输出两个
6、数,按从小到大的顺序输出 #include void main() int a, b; int *p1, *p2, *p; cout a b; p1 = p2 = if( *p1 *p2 ) p = p1; p1 = p2; p2 = p; cout min= *p1 max= *p2 endl; 请输入两个整数:30 10 min = 10 max = 30 void main() int a, b; a = 10; b = 20; s, cout a , b endl; void s *x, int *y) int temp; temp = *x; *x = *y; *y = temp;
7、C程序设计第6章指针 程序运行过程中变量值的变化分析程序运行过程中变量值的变化分析 y y b10 a x 20b y void main() int a, b; a = 10; b = 20; swap(a, b); cout a , b endl; 10a 10 x 20b 20y 1020 xy 10temp 2020 xy 10temp 2010 xy 10temp void s x, int y) int temp; temp = x; x = y; y = temp; 注意:值传递时,函数的实参与形参在内存中占用不同的存储空间,值注意:值传递时,函数的实参与形参在内存中占用不同的存
8、储空间,值 只能由实参传递给形参,而形参的变化并不会影响实参。只能由实参传递给形参,而形参的变化并不会影响实参。 C程序设计第6章指针 比较以下函数比较以下函数 #include void s *x, int *y); void main() int a, b; a = 10; b = 20; s, cout a , b endl; void s *x, int *y) int *temp; temp = x; x = y; y = temp; void s *x, int *y) int *temp; *temp = *x; *x = *y; *y = *temp; # C程序设计第6章指针
9、 1. 指针运算指针运算 n指针运算包括指针运算包括算术运算算术运算、关系运算关系运算与与赋值赋值 运算运算。 n 指针可以与整数进行指针可以与整数进行加减运算加减运算,结果,结果与指与指 针所指向的数据类型针所指向的数据类型有关。有关。p+n表示指针表示指针p 当前所指向位置后面第当前所指向位置后面第n个同类型数据的地个同类型数据的地 址,址, p-n表示指针表示指针p当前所指向位置前面第当前所指向位置前面第 n个同类型数据的地址。个同类型数据的地址。 6.3 指针与数组指针与数组 C程序设计第6章指针 例例 指针与整数的加减运算指针与整数的加减运算 #include void main()
10、 int a, *p1,*p2; double b, *p3, *p4; p1 = p3 = cout p1 p3 endl; p2 = p1+1; /p1+1与与p3+1的含义不同,与指针数据类型有关的含义不同,与指针数据类型有关 p4 = p3+1; cout p2 p4 endl; p2 = p1-1; /p1-1与与p3-1的含义不同,与指针数据类型有关的含义不同,与指针数据类型有关 p4 = p3-1; cout p2 p4 endl; p2 = p1+5; p4 = p3+5; cout p2 p4 endl; 0 x0012FF7C 0 x0012FF6C 0 x0012FF80
11、 0 x0012FF74 0 x0012FF78 0 x0012FF64 0 x0012FF90 0 x0012FF94 C程序设计第6章指针 n指向同一种数据类型的指针可以进行关系运算。指向同一种数据类型的指针可以进行关系运算。 两个相同类型的指针相等,表示这两个指针指向两个相同类型的指针相等,表示这两个指针指向 同一个地址。同一个地址。 n指针也可以与指针也可以与0进行比较运算,如果进行比较运算,如果p=0成立,成立, 我们称我们称p是一个是一个空指针空指针,即指针,即指针p还没有具体指向。还没有具体指向。 n为了避免使用没有指向的指针,在定义指针变量为了避免使用没有指向的指针,在定义指针
12、变量 时,可以将其时,可以将其初始化为初始化为0(也可以写成(也可以写成NULL)。)。 指针的关系运算指针的关系运算 C程序设计第6章指针 例例: 使用空指针使用空指针 #include void main() int a, *p=NULL; cout p endl; if(p!=NULL) *p=10; cout 将将10赋值给赋值给p所指向的地址所指向的地址 endl; else cout p是空指针,不能使用!是空指针,不能使用! endl; p = cout p endl; if(p!=NULL) *p=10; cout 将将10赋值给赋值给p所指向的地址所指向的地址 endl; e
13、lse cout p是空指针,不能使用!是空指针,不能使用! endl; 0 x00000000 p是空指针,不能使用! 0 x0012FF7C 将10赋值给p所指向的地址 C程序设计第6章指针 n数组在内存中是连续存放的,每个数组元素数组在内存中是连续存放的,每个数组元素 都占用存储单元都占用存储单元, ,有相应地址有相应地址, ,所以指针可以指所以指针可以指 向数组元素向数组元素. . 如如: : int a10, *p; p= *p , a5 含义相同含义相同 2.指向数组元素的指针指向数组元素的指针 C程序设计第6章指针 n 数组名数组名就是数组的就是数组的首地址首地址(第一个元素的地
14、(第一个元素的地 址),指针可以与整数进行加减运算,利用这址),指针可以与整数进行加减运算,利用这 一性质可以方便地通过指针引用数组元素。一性质可以方便地通过指针引用数组元素。 如如: int a10,*p; 则则: p=a; p= 含义相同含义相同 p+i a+i 含义相同含义相同 *(p+i) *(a+i) ai 含义相同含义相同 注注:又称又称变址运算符变址运算符. ai 的地址为的地址为: a+i*d n 指向数组元素的指针变量也可带下标指向数组元素的指针变量也可带下标,如如pi. 2.指向数组元素的指针指向数组元素的指针 C程序设计第6章指针 例例 使用指针输出数组中的所有元素使用指
15、针输出数组中的所有元素 #include void main() int a6 = 1,2,3,4,5,6; int *p; p = a; for(int i=0; i6; i+) cout *p ; p+; cout endl; 1 2 3 4 5 6 1 2 3 4 5 6a p C程序设计第6章指针 例例6.5 输出数组中的全部元素。输出数组中的全部元素。 n下标法下标法 #include using namespace std; int main( ) int a10; int i; for(i=0;iai; coutendl; for(i=0;i10;i+) coutai ; cou
16、tendl; return 0; n 用指针变量指向数组元素用指针变量指向数组元素 #include using namespace std; int main( ) int a10; int i,*p=a; for(i=0;i*(p+i); /输入输入a0a9 coutendl; for(p=a;p(a+10);p+) cout*p ; coutendl; return 0; C程序设计第6章指针 比较比较 n下标法每次通过变址运算符计算数组下标法每次通过变址运算符计算数组 元素的地址元素的地址,指针变量直接指向元素指针变量直接指向元素,不不 必每次都重新计算地址必每次都重新计算地址,故效率
17、高故效率高. n但是但是,用下标法比较直观用下标法比较直观,能直接知道第能直接知道第 几个元素几个元素. C程序设计第6章指针 注意注意 n指针变量可能指向数组以后的内存单元指针变量可能指向数组以后的内存单元,在使用在使用 指针变量指向数组元素时指针变量指向数组元素时,应切实保证指向数组应切实保证指向数组 中有效的元素中有效的元素. n注意指针变量自加自减运算及其所指向的元素注意指针变量自加自减运算及其所指向的元素. np+ 使使p指向下一个元素指向下一个元素 n*p+ 先得到先得到p所指变量值所指变量值,再使再使p加加1.等同于等同于*(p+). n*(+p) 先使先使p加加1,再得到再得到
18、p所指变量值所指变量值. n(*p)+ 表示表示p所指向的元素值加所指向的元素值加1. C程序设计第6章指针 例例: 指向同一个数组的两个指针的减法运算指向同一个数组的两个指针的减法运算 #include void main() int a10 = 1,2,3,4,5,6,7,8,9,10; int *p1, *p2; p1 = a; p2 = cout p2-p1 endl; p1 = p2 = cout p2-p1 endl; 3 5 a p1 1 2 3 4 5 6 7 8 9 10 p2 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 C程序设计第6章指针 3. 指针作为函
19、数的参数接收数组地址指针作为函数的参数接收数组地址 n数组名作为函数的参数实际上传递的是数组数组名作为函数的参数实际上传递的是数组 的首地址,进行的是的首地址,进行的是地址传递地址传递, ,用指针变量用指针变量 作函数参数作函数参数, ,同样可以接收实参传来的数组同样可以接收实参传来的数组 首元素的地址首元素的地址。 例例6.6 用选择法将用选择法将10个整数按由小到大的顺个整数按由小到大的顺 序排列。序排列。 要求要求:将形参改为指针变量。将形参改为指针变量。 C程序设计第6章指针 函数函数 void select_sort(int *p,int n) /用指针变量作形参用指针变量作形参 i
20、nt i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(*(p+j)*(p+k) k=j; /用指针法访问数组用指针法访问数组 t=*(p+k);*(p+k)=*(p+i);*(p+i)=t; C程序设计第6章指针 #include using namespace std; void select_sort(int *p,int n); int main( ) int a10,i; coutenter the originl array:endl; for(i=0;iai; coutendl; select_sort(a,10); coutt
21、he sorted array:endl; for(i=0;i10;i+) coutai ; coutendl; return 0; 主程序主程序 C程序设计第6章指针 说明说明 n用指针变量作形参用指针变量作形参, ,接收实参数组名接收实参数组名, ,和数组名和数组名 作形参作形参, ,本质上是一样的本质上是一样的.C+.C+编译系统将形参编译系统将形参 数组名一律作为指针变量处理数组名一律作为指针变量处理. . 如如: :void select_sort(int array,int n) 处理为处理为: void select_sort(int *array,int n) n在函数调用时不
22、存在占有内存空间的形参数组在函数调用时不存在占有内存空间的形参数组, 只为指针变量分配空间只为指针变量分配空间,形参数组和实参数组共形参数组和实参数组共 占同一段内存单元占同一段内存单元. C程序设计第6章指针 实参和形参的结合有实参和形参的结合有4种形式种形式 实参实参形参形参 数组名数组名数组名数组名 数组名数组名指针变量指针变量 指针变量指针变量数组名数组名 指针变量指针变量指针变量指针变量 注注:实参数组名是常量实参数组名是常量,形参数组名是变量形参数组名是变量 C程序设计第6章指针 例例: 编写一个函数,将数组中的元素按照编写一个函数,将数组中的元素按照 相反的顺序存放相反的顺序存放
23、 分析:将数组名和元素个数作为函数的参数,可以分析:将数组名和元素个数作为函数的参数,可以 通过地址访问数组中的所有元素。在函数中将数组通过地址访问数组中的所有元素。在函数中将数组 的第一个元素与最后一个元素交换,第二个元素与的第一个元素与最后一个元素交换,第二个元素与 倒数第二个元素交换,一直进行到中间,即完成反倒数第二个元素交换,一直进行到中间,即完成反 序存放。序存放。 C程序设计第6章指针 源程序源程序 #include void inv(int x, int n); void main() int i,a10=0,1,2,3,4,5,6,7,8,9; cout 原数组:原数组: en
24、dl; for(i=0;i10;i+) cout ai ; cout endl; inv(a,10); cout 交换后的数组:交换后的数组: endl; for(i=0;i10;i+) cout ai ; cout endl; 原数组:0 1 2 3 4 5 6 7 8 9 交换后的数组:9 8 7 6 5 4 3 2 1 0 void inv(int x, int n) int temp,i,j,m; m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; temp=xi; xi=xj; xj=temp; 注意:由于传递的是数组地址,因此形参注意:由于传递的是数组地址,因此
25、形参x 和实参和实参a指向相同的内存地址,因此在函数指向相同的内存地址,因此在函数 体中对体中对x的操作实际上就是对的操作实际上就是对a的操作的操作 C程序设计第6章指针 注意:数组名作为函数参数传递的是数组首地址,因此也可以直接将形参改注意:数组名作为函数参数传递的是数组首地址,因此也可以直接将形参改 为指针,当数组名作为实参时,同样能够传递数组首地址。将函数为指针,当数组名作为实参时,同样能够传递数组首地址。将函数inv()做以做以 下修改:下修改: void inv(int *x, int n) int *i, *j, temp, m; m=(n-1)/2; for(i=x, j=x+n
26、-1; ij; i+, j-) temp=*i; *i=*j; *j=temp; 0 1 2 3 4 5 6 7 8 9 i x j C程序设计第6章指针 4.多维数组与指针多维数组与指针 (1)多维数组元素的地址多维数组元素的地址( (二维二维) ) n一个二维数组可以看成元素是一维数组的一一个二维数组可以看成元素是一维数组的一 维数组维数组. . 如如:int a34=1,3,5,7,9,11,13,15,17,19,21,23 可以看成可以看成a是是3个元素的一维数组个元素的一维数组,每个元素又是每个元素又是4个个 元素的一维数组元素的一维数组. a2 a1 a0 23211917 15
27、1311 9 7531 a C程序设计第6章指针 由此可见由此可见 na指向指向a0(即即a= int main( ) int a34=1,3,5,7,9,11,13,15,17,19,21,23; int *p; /p是基类型为整型的指针变量是基类型为整型的指针变量 for(p=a0;pa0+12;p+) cout*p ; coutendl; return 0; C程序设计第6章指针 n指向一维数组的指针变量指向一维数组的指针变量 一般格式一般格式: 基类型名基类型名 (*指针变量名指针变量名)常量表达式常量表达式 例例6.8 输出二维数组任一行任一列元素的值。输出二维数组任一行任一列元素的
28、值。 #include using namespace std; int main( ) int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4,i,j; cinij; p=a; cout*(*(p+i)+j)endl; return 0; C程序设计第6章指针 (3)指向数组元素的指针作函数参数指向数组元素的指针作函数参数 n指向一维数组元素的指针作函数参数指向一维数组元素的指针作函数参数,可以接可以接 收二维数组名作实参收二维数组名作实参. 例例6.9 输出二维数组各元素的值。输出二维数组各元素的值。 #include using namespa
29、ce std; int main( ) void output(int (*p)4); int a34= 1,3,5,7,9,11,13,15,17,19,21,23; output(a); return 0; void output(int (*p)4) int i,j; for(i=0;i3;i+) for(j=0;j4;j+) cout*(*(p+i)+j) ; coutendl; C程序设计第6章指针 6.4 字符串与指针字符串与指针 n字符串的访问方字符串的访问方 法有法有3种种: 用字符数组用字符数组 用字符串变量用字符串变量 用字符指针用字符指针 例例6.13 将字符串将字符串s
30、tr1复制为字符复制为字符 串串tr2。 #include using namespace std; int main( ) char str1=I love CHINA!; char str220,*p1,*p2; p1=str1;p2=str2; for(;*p1!=0;p1+,p2+) *p2=*p1; *p2=0; p1=str1; p2=str2; coutstr1 is: p1endl; coutstr2 is: p2endl; return 0; C程序设计第6章指针 6.5 函数与指针函数与指针 1.用函数指针变量调用函数用函数指针变量调用函数 n一个函数在编译时被分配一个入口
31、地址一个函数在编译时被分配一个入口地址,函数名函数名 代表函数入口地址代表函数入口地址,函数入口地址称为函数的指函数入口地址称为函数的指 针针. n可以用一个指针变量指向函数可以用一个指针变量指向函数. n指向函数的指针变量的一般定义形式指向函数的指针变量的一般定义形式: 函数类型函数类型 (*指针变量名指针变量名)(函数形参表函数形参表) 例如:例如: int (*p)(int,int); 就定义了一个函数指针就定义了一个函数指针p,它指向一个返回整型值,它指向一个返回整型值, 有两个整型参数的函数。有两个整型参数的函数。 C程序设计第6章指针 n 函数指针变量的赋值函数指针变量的赋值 在定
32、义了指向函数的指针变量后,在使用此函数指针在定义了指向函数的指针变量后,在使用此函数指针 之前,必须先给它赋值,使它指向一个函数的入口地址。之前,必须先给它赋值,使它指向一个函数的入口地址。 由于函数名是函数在内存中的首地址,因此可以赋给函数由于函数名是函数在内存中的首地址,因此可以赋给函数 指针变量。指针变量。 赋值的一般语法格式为:函数指针名赋值的一般语法格式为:函数指针名=函数名;函数名; 例如,对上面刚定义的函数指针例如,对上面刚定义的函数指针p,可以给它赋值如下:,可以给它赋值如下: p=func1; 其中,函数名所代表的函数必须是一个已经定义过的,其中,函数名所代表的函数必须是一个
33、已经定义过的, 和函数指针具有相同返回类型的函数。并且等号后面只需和函数指针具有相同返回类型的函数。并且等号后面只需 写函数名而不要写参数,例如不要写成下列形式:写函数名而不要写参数,例如不要写成下列形式: p=func1(a, b); C程序设计第6章指针 n 函数指针变量的使用函数指针变量的使用 当函数指针指向某函数以后,可以用下列形式调用函数:当函数指针指向某函数以后,可以用下列形式调用函数: (*指针变量)(实参表列)指针变量)(实参表列) 例如:(例如:(*p)()(a,b),它相当于),它相当于funl(a,b)。)。 必须指出的是:指针的运算在这里是无意义的。因为指必须指出的是:
34、指针的运算在这里是无意义的。因为指 针指向函数的首地址。当用指针调用函数时,程序是从针指向函数的首地址。当用指针调用函数时,程序是从 指针所指向的位置开始按程序执行,若进行指针运算,指针所指向的位置开始按程序执行,若进行指针运算, 程序的执行就不是从函数的开始位置执行,这就会造成程序的执行就不是从函数的开始位置执行,这就会造成 错误。错误。 C程序设计第6章指针 例例6.14 求和中的大者。求和中的大者。 #include using namespace std; int main( ) int max(int x,int y); /函数声明函数声明 int (*p)(int,int); /定
35、义指向函数的指针变量定义指向函数的指针变量p int a,b,m; p=max; /使使p指向函数指向函数max cinab; m=p(a,b); coutmax=mendl; return 0; C程序设计第6章指针 6.6 返回指针值的函数返回指针值的函数 n当一个函数的返回值是指针类型时,这个函数就是指当一个函数的返回值是指针类型时,这个函数就是指 针型函数。针型函数。 n通常非指针型函数调用结束后,可以返回一个变量,通常非指针型函数调用结束后,可以返回一个变量, 但是这样每次调用只能返回一个数据。有时需要从被但是这样每次调用只能返回一个数据。有时需要从被 调函数返回一批数据到主调函数中
36、,这时可以通过指调函数返回一批数据到主调函数中,这时可以通过指 针型函数来解决。针型函数来解决。 n指针型函数在调用后返回一个指针,通过指针中存储指针型函数在调用后返回一个指针,通过指针中存储 的地址值,主调函数就能访问该地址中存放的数据,的地址值,主调函数就能访问该地址中存放的数据, 并通过指针算术运算访问这个地址的前、后内存中的并通过指针算术运算访问这个地址的前、后内存中的 值。因此,通过对空间的有效组织(如数组、字符串值。因此,通过对空间的有效组织(如数组、字符串 等能前后顺序存放多个变量的数据类型),就可以返等能前后顺序存放多个变量的数据类型),就可以返 回大量的数据。回大量的数据。
37、C程序设计第6章指针 n定义指针型函数的一般格式定义指针型函数的一般格式 数据类型数据类型 *函数名(参数表)函数名(参数表) 其中,数据类型是函数返回的指针所指向数据其中,数据类型是函数返回的指针所指向数据 的类型;的类型;*函数名声明了一个指针型的函数;函数名声明了一个指针型的函数; 参数表是函数的形参列表。参数表是函数的形参列表。 例如:例如: int *fun(a,b) 它表示函数它表示函数fun返回一个指针值,这个指针返回一个指针值,这个指针 指向一个整型数据,指向一个整型数据,a、b是形参。是形参。 C程序设计第6章指针 6.7指针数组和指向指针的指针指针数组和指向指针的指针 1.
38、 指针数组的概念指针数组的概念 n 数组元素是指针的数组,称为指针数组。数组元素是指针的数组,称为指针数组。 n 定义格式:定义格式: 类型名类型名 *数组名数组名常量表达式常量表达式; 如如 int *p110; double *p210; n 用指针数组可以方便处理多个字符串或二维数用指针数组可以方便处理多个字符串或二维数 组组. C程序设计第6章指针 例例6.15 若干字符串按字母顺序(由小到大)若干字符串按字母顺序(由小到大) 输出。输出。 #include using namespace std; void sort(char *name,int n); /声明函数声明函数 void
39、 print(char *name,int n); int main( ) char*name= BASIC,FORTRAN,C+,Pascal,COBOL; /定定 义指针数组义指针数组 int n=5; sort(name,n); print(name,n); return 0; C程序设计第6章指针 函数函数 void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei;namei=namek;namek=temp; void
40、print(char *name,int n) int i; for(i=0;in;i+) coutnameiendl; C程序设计第6章指针 例例: 用指针数组处理二维数组的元素用指针数组处理二维数组的元素 #include void main() int line33=1,0,0, 0,1,0,0,0,1; int *p_line3; /声明整型指针数组声明整型指针数组 p_line0=line0; /初始化指针数组元素初始化指针数组元素 p_line1=line1; p_line2=line2; coutMatrix test:endl; /输出单位矩阵输出单位矩阵 for(int i=
41、0;i3;i+) /对指针数组元素循环对指针数组元素循环 for(int j=0;j3;j+) /对矩阵每一行循环对矩阵每一行循环 coutp_lineij ; coutendl; 1 0 0 0 1 0 0 0 1 1 p_lineline p_line0 p_line1 p_line2 1 1 0 0 00 0 0 C程序设计第6章指针 2.指向指向指针的指针指针的指针 n如果一个指针变量保存的是另一个指针变量的地址,如果一个指针变量保存的是另一个指针变量的地址, 我们称之为指向指针的指针,或多级指针。我们称之为指向指针的指针,或多级指针。 n定义格式:定义格式: 类型名类型名 *指针变量
42、名指针变量名; 如:如: int *p1; double *p2; C程序设计第6章指针 例例: 二级指针的应用二级指针的应用 #include void main() int a, *p1, *p2; double b, *p3, *p4; a=10; b=22.3; p1 = p3 = p2 = p4 = cout a *p1 *p2 endl; cout b *p3 *p4 endl; *p2 = 20; *p4 = 45.8; cout a *p1 *p2 endl; cout b *p3 *p4 endl; 10 10 10 22.3 22.3 22.3 20 20 20 45.8
43、45.8 45.8 char *p; int i; for(i=0; i4; i+) p = name+i; cout *p endl; Basic Fortran C+ Pascal name0 name1 name2 name3 Basic Fortran C+ Pascal p C程序设计第6章指针 #include #include void stringcat(char *s1, char *s2); void main() char a20 = abcde; char b = fgh123; cout a endl; cout b endl; stringcat(a,b); cou
44、t a endl; cout b endl; 例例: 编写一个函数,将两个字符串连接起来编写一个函数,将两个字符串连接起来 void stringcat(char *s1, char *s2) int i,len; len = strlen(s1); for(i=0; s2i!=0; i+) s1len+i = s2i; s1len+i = 0; a b c d e 0 s2 f g h 1 2 3 0 s1 C程序设计第6章指针 n虽然用指针作函数的参数可以使得形参的虽然用指针作函数的参数可以使得形参的 改变对相应的实参有效。但是,如果在函改变对相应的实参有效。但是,如果在函 数中反复使用指针进行间接访问,会影响数中反复使用指针进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 舅舅房子赡养继承协议书
- 肇庆手提电脑租赁协议书
- 朱砂原材料采购合同范本
- 碧桂园开发的合同协议书
- 网络服务代理合同协议书
- 苏陕两地协作框架协议书
- 肉牛供应买卖合同协议书
- 联合种植香芋协议合同书
- 阁楼钢结构制作合同范本
- 纸箱送货如何写合同协议
- 2025至2030中国油气3D打印行业调研及市场前景预测评估报告
- 2025至2030中国电液执行机构行业发展现状及未来趋势前景预判报告
- (2025)《中华人民共和国监察法》知识考试题库及参考答案
- 2024年绥阳县选聘城市社区工作者笔试真题
- 昆虫乐园活动方案
- 2024 年度投资者知权行权维权调查报告
- 物业费的催费技巧培训
- 2025年地区事业单位卫生类临床医学专业知识考试历年试卷
- 2025至2030中国枇杷果汁饮料行业产业运行态势及投资规划深度研究报告
- 护理事业十五五发展规划(2026-2030)
- 城市公园采购休闲座椅及户外家具及配套设施合同
评论
0/150
提交评论