网站改版十烟台做网站的
web/
2025/9/28 5:58:22/
文章来源:
网站改版十,烟台做网站的,个人模板建站,王也高清全屏壁纸一、数组指针 1.指向数组元素的指针 1、定义#xff1a;还是那句话通俗的说指针就是地址 数组指针 #xff1a;数组的起始地址 数组元素指针#xff1a;数组元素的地址 2、定义一个指向数组元素的指针变量的方法#xff0c;与之前介绍的指针变量相同。 例如#…一、数组指针 1.指向数组元素的指针 1、定义还是那句话通俗的说指针就是地址 数组指针 数组的起始地址 数组元素指针数组元素的地址 2、定义一个指向数组元素的指针变量的方法与之前介绍的指针变量相同。 例如 int a[10] /*定义 a 为包含10 个整型数据的数组*/ int *p /*定义p为指向整型变量的指针*/ 3、指针变量赋值 pa[0]; //或者pa; 原因是p,a,a[0]均指向同一单元 把 a[0]元素的地址赋给指针变量 p。也就是说p指向 a 数组的第 0 号元素。 4、格式 类型说明符 *指针变量名 2. 通过指针引用数组元素 看图识字 1、 pi 和ai 就是 a[i]的地址或者说它们指向 a数组的第 i个元素。 2、*(pi)或*(ai)就是pi或ai所指向的数组元素 即a[i]。 例如 *(p5)或*(a5)就是a[5]。 3、指向数组的指针变量也可以带下标如 p[i]与*(pi)等价。 根据以上叙述引用一个数组元素可以用 1、下标法即用 a[i]形式访问数组元素。 2、指针法即采用*(ai)或*(pi)形式用间接访问的方法来访问数组元素其中 a是数组名p是指向数组的指针变量其处值 pa。 Eg: 1、下标法 2、通过数组名计算元素的地址 3、指针变量指向元素 注意的问题 1、指针变量可以实现本身的值的改变。如 p是合法的而 a是错误的。因为 a 是数组名它是数组的首地址是常量。 2、要注意指针变量的当前值。请看下面的程序。 int a[10],i,*p;pa;//pa[0]for(i0;i10;i)*pi; //a[i]ifor(i 0;i10;i)printf(a[%d]%d\n,i,*p); 你看看出问题吗如果可以别忘了告诉我虽然书上解释了“要注意指针变量的当前值”但是还是有点迷糊 看看运行结果 正确的方法就是把上面注释的部分拿出来即可看看结果 3.数组名作函数参数 数组名可以作函数的实参和形参 main()
{int array[10]; …… …… f(array,10);
…… ……
} f(int arr[],int n); {
…… ……
}
array 为实参数组名arr为形参数组名。 Eg将数组 a 中的 n 个整数按相反顺序存放。 1、形参是数组名 main()
{//将数组 a 中的 n 个整数按相反顺序存放。 int i,a[10]{3,7,9,11,0,6,7,5,4,2};printf(The original array:\n);for(i0;i10;i){printf(%d,,a[i]);}printf(\n);inv(a,10);printf(The array has been inverted:\n);for(i0;i10;i){printf(%d,,a[i]);}printf(\n);
}
/*形参是数组名*/inv(int x[],int n)
{int temp,i,j,m(n-1)/2;for(i0;im;i){jn-1-i;tempx[i];x[i]x[j];x[j]temp; }
} 2、形参x为指针变量 /*形参x为指针变量*/inv2(int *x,int n){int *p,temp,*i,*j,m(n-1)/2;ix ;jxn-1;pxm;for(;ip;i,j--){temp*i;*i*j;*jtemp;}return;} 归纳总结如果有一个实参数组想在函数中改变此数组的元素的值实参与形参的对应关系有以下种 1、形参和实参都是数组名。 main() f(int x[],int n) { ……} {int a[10]; …… f(a,10) …… } 2、实用数组形参用指针变量 main() f(int *x,int n) { …… } {int a[10]; …… f(a,10) …… } 3、 实参、型参都用指针变量 4、实参为指针变量型参为数组名 4.指向多维数组的指针和指针变量 1. 多维数组的地址 设有整型二维数组 a[3][4]如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为 int a[3][4]{{0,1,2,3},{4,5,6,7},{8,9,10,11}} 语言允许把一个二维数组分解为多个一维数组来处理,因此数组 a 可分解为三个一维数组即 a[0]a[1]a[2] 例如 a[0]数组含有 a[0][0]a[0][1]a[0][2]a[0][3]四个元素。 a[0]是第一个一维数组的数组名和首地址因此aa[0]*(a0)*aa[0][0]是相等的。 Eg: int a[3][4] {0,1,2,3,4,5,6,7,8,9,10,11}; //0,1,2,3 a[0]行//4,5,6,7 a[1]行//8,9,10,11 a[2]行printf(0\n);printf(%d\n,*(a0)); printf(%d\n,a); printf(%d\n,*a); printf(%d\n,a[0]); printf(%d\n,a[0]); printf(%d\n,a[0][0]); printf(………………………………………………\n);printf(1\n);printf(%d\n,a1); printf(%d\n,*(a1)); printf(%d\n,a[1]); printf(%d\n,a[1]); printf(%d\n,a[1][0]); printf(………………………………………………\n); printf(2\n);printf(%d\n,a2); printf(%d\n,*(a2)); printf(%d\n,a[2]); printf(%d\n,a[2]); printf(%d\n,a[2][0]); printf(………………………………………………\n); printf(3【a[1]行112449964】\n);printf(%d\n,a[1]1); printf(%d\n,*(a1)1); printf(………………………………………………\n); printf(取2行值\n);printf(%d,%d\n,*(a[1]0),*(*(a1)0)); printf(%d,%d\n,*(a[1]1),*(*(a1)1)); printf(%d,%d\n,*(a[1]4),*(*(a1)4)); //越界继续向下取值8*/ 结果 2.指向多维数组的指针变量 把二维数组 a 分解为一维数组 a[0],a[1],a[2]之后设 p 为指向二维数组的指针变量。可定义为 int (*p)[4] 它表示 p 是一个指针变量它指向包含 4 个元素的一维数组。若指向第一个一维数组a[0]其值等于 a,a[0]或a[0][0]等。而 pi 则指向一维数组 a[i]。从前面的分析可得出*(pi)j是二维数组 i 行j 列的元素的地址而*(*(pi)j)则是i行 j 列元素的值。 二维数组指针变量说明的一般形式为 类型说明符 (*指针变量名)[长度] 注意“(*指针变量名)”两边的括号不可少如缺少括号则表示是指针数组 eg: main(){ int a[3][4]{0,1,2,3,4,5,6,7,8,9,10,11}; int(*p)[4]; int i,j; pa; for(i0;i3;i) {for(j0;j4;j) printf(%2d ,*(*(pi)j)); printf(\n);}
} 二、字符串指针 1、字符串的表示形式 C 语言中可以用两种方法访问一个字符串 1、用字符数组存放一个字符串然后输出该字符串 2、用字符串指针指向一个字符串 2、 使用字符串指针变量与字符数组的区别 1、字符串指针变量本身是一个变量用于存放字符串的首地址而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束 2、对字符串指针方式 char *psC Language; 可以写为 char *ps; psC Language; 而对数组方式 static char st[]{C Language}; 不能写为 char st[20]; st{C Language}; 而只能对字符数组的各元素逐个赋值。 三、函数指针 在语言中一个函数总是占用一段连续的内存区而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。 函数指针变量定义的一般形式为 类型说明符 (*指针变量名)(); 其中“类型说明符”表示被指函数的返回值的类型。 “(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。 例如 int (*pf)(); Eg: main()
{int comMax(int a,int b);int (*pmax) ();//定义类型说明符 (*指针变量名)(); 表示 pmax 是一个指向函数入口的指针变量该函数的返回值(函数值)是整型。int x,y,z;pmaxcomMax;printf(input two numbers:\n);scanf(%d%d,x,y);z(*pmax)(x,y);//调用函数的一般形式为(*指针变量名) (实参表) 或者 comMax(x,y);printf(max%d,z);
}int comMax(int a,int b)
{if(ab) return a; else return b;
} 结果 从上述程序可以看出用函数指针变量形式调用函数的步骤如下 1、先定义函数指针变量如后一程序中第 9 行 int (*pmax)();定义 pmax 为函数指针变量 2、把被调函数的入口地址(函数名)赋予该函数指针变量如程序中第 11 行 pmaxmax; 3、用函数指针变量形式调用函数如程序第 14 行 z(*pmax)(x,y); 4、调用函数的一般形式为 (*指针变量名) (实参表) 使用函数指针变量还应注意以下两点 a、函数指针变量不能进行算术运算这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素而函数指针的移动是毫无意义的 b、函数调用中(*指针变量名)的两边的括号不可少其中的*不应该理解为求值运算在此处它只是一种表示符号 作者PEPE 出处http://pepe.cnblogs.com/ 本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接否则保留追究法律责任的权利。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83167.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!