数组12 c语言多维数组的指针变量 - 中安网培 - 黑客培训,.

黑客培训  时间:2021-01-22  阅读:()

12 c语言多维数组的指针变量-中安网培-黑客培训安全培训门户网站

12 c语言多维数组的指针变量

12 c语言多维数组的指针变量

[作者佚名 |文章来源 hackervip(中安网络安全培训) | 点击数

|更新时间 2005-6-3 ]

[文字 变小变大]

多维数组的指针变量(1) 一、多维数组地址的表示方法 设有整型二维数组a[3] [4]如下 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000各下标变量的首地址及其值如图所示。在前面曾经介绍过 C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组 即a[0]  a[1]  a[2] 。每一个一维数组又含有四个元素。例如a[0]数组含有a[0] [0]  a[0] [1]  a[0] [2]  a[0] [3]四个元素。数组及数组元素的地址表示如下 a是二维数组名也是二维数组0行的首地址等于1000。 a[0]是第一个一维数组的数组名和首地址 因此也为1000。

*(a+0)或*a是与a[0]等效的 它表示一维数组a[0]0号元素的首地址。 也为1000。 &a[0] [0]是二维数组a的0行0列元素首地址 同样是1000。因此a a[0]  *(a+0)  *a &a[0] [0]是相等的。 同理 a+1是二维数组1行的首地址等于1008。 a[1]是第二个一维数组的数组名和首地址 因此也为1008。&a[1] [0]是二维数组a的1行0列元素地址也是1008。因此a+1,a[1] ,*(a+1) ,&a[1] [0]是等同的。 由此可得出 a+i a[i]  *(a+i) &a[i] [0]是等同的。 此外 &a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址不存在元素a[i] 。 C语言规定它是一种地址计算方法表示数组a第i行首地址。 由此我们得出 a[i]  &a[i] 

*(a+i)和a+i也都是等同的。另外 a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址 而a[0]+1则是a[0]的1号元素首地址 由此可得出a[i]+j则是一维数组a[i]的j号元素首地址它等于&a[i] [j] 。 由a[i]=*(a+i)得a[i]+j=*(a+i)+j 由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(*(a+i)+j) 。 [Explain]

#define PF "%d,%d,%d,%d,%d, \n"main() {static inta[3] [4]={0, 1,2,3,4,5,6,7,8,9, 10, 11} ;printf(PF,a,*a,a[0] ,&a[0] ,&a[0] [0]) ;printf(PF,a+1,*(a+1) ,a[1] ,&a[1] ,&a[1] [0]) ;printf(PF,a+2,*(a+2) ,a[2] ,&a[2] ,&a[2] [0]) ;printf("%d,%d\n",a[1]+1,*(a+1)+1) ;printf("%d,%d\n",

*(a[1]+1) ,*(*(a+1)+1) ) ; }多维数组的指针变量(2) 二、多维数组的指针变量 把二维数组a分解为一维数组a[0] ,a[1] ,a[2]之后设p为指向二维数组的指针变量。可定义为 int (*p) [4]它表示p是一个指针变量它指向二维数组a或指向第一个一维数组a[0] 其值等于a,a[0] 或&a[0] [0]等。而p+i则指向一维数组a[i] 。从前面的分析可得出*(p+i)+j是二维数组i行j列的元素的地址而*(*(p+i)+j)则是i行j列元素的值。二维数组指针变量说明的一般形式为 类型说明符(*指针变量名) [长度]其中“类型说明符”为所指数组的数据类型。 “*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时 一维数组的长度也就是二维

数组的列数。应注意“(*指针变量名)”两边的括号不可少如缺少括号则表示是指针数组(本章后面介绍) 意义就完全不同了。 [Explain]main() {static inta[3] [4]={0, 1,2,3,4,5,6,7,8,9, 10, 11} ; int(*p) [4] ; inti, j;p=a;for(i=0; i<3; i++)for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j) ) ; }

‘Expain字符串指针变量的说明和使用字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。 对指向字符变量的指针变量应赋予该字符变量的地址。如 char c,*p=&c;表示p是一个指向字符变量c的指针变量。而 char *s="C Language";则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。 请看下面一例。main() {char *ps;ps="C Language";printf("%s",ps) ; } 运行结果为C Language 上例中首先定义ps是一个字符指针变量 然后把字符串的首地址赋予ps(应写出整个字符串 以便编译系统把该串装入连续的一块内存单元) 并把首地址送入ps。程序中的 char *ps;ps="C Language";等效于 char *ps="C Language";输出字符串中n个字符后的所有字符。main() {char *ps="this is a book"; intn=10;ps=ps+n;printf("%s\n",ps) ; } 运行结果为 book在程序中对ps初始化时 即把字符串首地址赋予ps 当ps= ps+10之后 ps指向字符“b”  因此输出为"book"。main() {char st[20] ,*ps; int i ;printf("input astring:\n") ;ps=st;scanf("%s",ps) ;for(i=0;ps[i] != ‘\0 ‘ ; i++) if(ps[i]==

‘k ‘) {printf("there is a ‘k ‘ in thestring\n") ;break; } if(ps[i]== ‘\0 ‘) printf("There is no ‘k ‘ in thestring\n") ; } 本例是在输入的字符串中查找有无‘k’字符。 下面这个例子是将指针变量指向一个格式字符串用在printf函数中用于输出二维数组的各种地址表示的值。但在printf语句中用指针变量PF代替了格式串。 这也是程序中常用的方法。main() {static int a[3] [4]={0, 1,2,3,4,5,6,7,8,9, 10, 11} ;char

*PF;PF="%d,%d,%d,%d,%d\n";printf(PF,a,*a,a[0] ,&a[0] ,&a[0] [0]) ;printf(PF,a+1,*(a+1) ,a[1] ,&a[1] ,&a[1] [0]) ;printf(PF,a+2,*(a+2) ,a[2] ,&a[2] ,&a[2] [0]) ;printf("%d,%d\n",a[1]+1,*(a+1)+1) ;printf("%d,%d\n",*(a[1]+1) ,

*(*(a+1)+1) ) ; }多维数组的指针变量(3) 在下例是讲解把字符串指针作为函数参数的使用。要求把一个字符串的内容复制到另一个字符串中并且不能使用strcpy函数。函数cprstr的形参为两个字符指针变量。 pss指向源字符串 pds指向目标字符串。表达式

(*pds=*pss) !=' \0 ‘cpystr(char *pss,char

*pds) {while( (*pds=*pss) != ‘\0 ‘) {pds++;pss++; } }main() {char

*pa="CHINA",b[10] ,*pb;pb=b;cpystr(pa,pb) ;printf("string a=%s\nstringb=%s\n",pa,pb) ; } 在上例中程序完成了两项工作一是把pss指向的源字符复制到pds所指向的目标字符中二是判断所复制的字符是否为' \0 ‘ 若是则表明源字符串结束不再循环。否则 pds和pss都加1指向下一字符。在主函数中 以指针变量pa,pb为实参分别取得确定值后调用cprstr函数。由于采用的指针变量pa和pss,pb和pds均指向同一字符串 因此在主函数和cprstr函数中均可使用这些字符串。也可以把cprstr函数简化为以下形式

cprstr(char *pss,char*pds) {while ( (*pds++=*pss++) !=' \0 ‘) ; } 即把指针的移动和赋值合并在一个语句中。 进一步分析还可发现' \0 ‘的ASCⅡ码为0对于wh i l e语句只看表达式的值为非0就循环为0则结束循环 因此也可省去“!=' \0 ‘”这一判断部分而写为以下形式cprstr (char *pss,char *pds) {while (*pdss++=*pss++) ; } 表达式的意义可解释为源字符向目标字符赋值 移动指针若所赋值为非0则循环否则结束循环。这样使程序更加简洁。简化后的程序如下所示。cpystr(char *pss,char *pds) {while(*pds++=*pss++) ; }main() {char

*pa="CHINA",b[10] ,*pb;pb=b;cpystr(pa,pb) ;printf("string a=%s\nstringb=%s\n",pa,pb) ; } 使用字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算。 但是两者是有区别的。在使用时应注意以下几个问题 1.字符串指针变量本身是一个变量用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以 ‘\0’作为串的结束。字符数组是由于若干个数组元素组成的它可用来存放整个字符串。 2.对字符数组作初始化赋值必须采用外部类型或静态类型如 static char st[]={ “C Language” } ;而对字符串指针变量则无此限制如 char *ps="C Language"; 3.对字符串指针方式char

*ps="C Language";可以写为 char *ps; ps="C Language";而对数组方式static char st[]={"C Language"} ; 不能写为char st[20] ;st={"C Language"} ; 而只能对字符数组的各元素逐个赋值。 从以上几点可以看出字符串指针变量与字符数组在使用时的区别 同时也可看出使用指针变量更加方便。前面说过 当一个指针变量在未取得确定地址前使用是危险的容易引起错误。但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。因此char *ps="C Langage"; 或者char *ps;ps="C Language"; 都是合法的。

数脉科技香港物理机 E3 16G 10M 华为线路165元 阿里云线路 188元 Cera线路 157元

2021年9月中秋特惠优惠促销来源:数脉科技 编辑:数脉科技编辑部 发布时间:2021-09-11 03:31尊敬的新老客户:9月优惠促销信息如下,10Mbps、 30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路首月五折起。数脉官网 https://my.shuhost.com/香港特价数脉阿里云华为云 10MbpsCN...

香港E3 16G 390元/ 香港E5*2 32G 600元/ 香港站群 4-8C 1200元/ 美国200G高防 900/ 日本100M 700元

3C云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超6年运营 。本次为大家带来的是双12特惠活动,香港美国日本韩国|高速精品|高防|站群|大带宽等产品齐全,欢迎咨询问价。3C云科技有限公司官方网站:http://www.3cccy.com/客服QQ:937695003网页客服:点击咨询客户QQ交流群:1042709810价目表总览升级内存 60元 8G内存升级硬盘 1T机械 90元 2...

Megalayer美国独立服务器配置及性能速度综合评测

Megalayer 商家在之前也有记录过,商家开始只有提供香港站群服务器和独立服务器,后来也有增加到美国独立服务器,以及前几天也有介绍到有增加香港VPS主机。对于香港服务器之前有过评测(Megalayer香港服务器配置一览及E3-1230 8GB服务器评测记录),这里申请到一台美国独立服务器,所以也准备简单的评测记录。目前市场上我们看到很多商家提供VPS或者云服务器基本上没有什么特别的,但是独立服...

黑客培训为你推荐
美团月付怎么关闭商家退出美团怎么退视频制作软件哪个好手机短视频制作哪个软件好等额本息等额本金哪个好等额本息与等额本金哪个划算?无纺布和熔喷布口罩哪个好一次性口罩的熔喷布和KN95的熔喷布有什么不同?股票软件哪个好请问:免费的模拟炒股软件哪个好?手机浏览器哪个好用手机哪个浏览器最好用看书软件哪个好手机读书软件哪个好用?qq空间登录qq空间如何登陆51空间登录51咋登录 咋登录好友的51空间辽宁联通网上营业厅网联通宽带好不好用
北京租服务器 新秒杀 漂亮qq空间 iisphpmysql 2017年黑色星期五 万网优惠券 500m空间 上海域名 日本bb瘦 有奖调查 河南m值兑换 刀片服务器的优势 老左来了 php空间购买 国外免费asp空间 微软服务器操作系统 如何安装服务器系统 免费网页申请 上海联通宽带测速 360云服务 更多