- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序设计 第10章_指针1
第十章 §10.1地址和指针的概念 §10.2 变量的指针和指向变量的指针变量 C语言中规定数组名代表数组中第一个元素(序号为0的元素)的地址.因此下面两个语句等价: p=a[0]; p=a; 数组名a不代表整个数组,p=a的作用是把a数组的首元素的地址赋给指针变量p,而不是把数组a各元素的值赋给p. 如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素.P+1所代表的地址实际上是p+1×d,d是一个数组元素所占的字节数. 如果p的初值为&a[0],则 (1)p+i和a+i就是a[i]的地址,它们指向a数组的第 i个元素. 如p+9和a+9的值是&a[9],它指向a[9]. (2)*(p+i)或*(a+i)是p+i或a+i所指向的数 组元素,即a[i]. 如*(p+5)或*(a+5)就是a[5]. 即*(p+5)=*(a+5)=a[5]. 指针变量的运算: (1)p++,使p指向下一个元素,即a[1]. (2)*p++,由于++和*同优先级,结合方向自右向左,等价于*(p++),作用是先得到p指向的变量的值(即*p),再使p+1=p. (3)*(p++)和*(++p)作用不同.前者是先取*p的值,然后使p+1.后者是先使p+1,再取*p.若p初值为a(即&a[0]),输出*(p++)时,得到a[0]的值,而输出*(++p),则得到a[1]的值. (4)(*p)++表示p所指向的元素值加1,如a[0]=3,则(a[0])++的值为4. arr接收了实参数组array的首地址后,arr就指向实参数组的首元素. *arr就是array[0]的值. *(arr+i)等价于arr[i]. 在调用函数期间,arr[0], *arr,以及array[0]都是数组 array第0个元素的值. 用数组名做参数时,如果形参数组中各元素的值 发生改变,实参数组元素的值随之发生改变. 有一个形参数组,它从实参数组那里得到起始地址,因此形参数组和实参数组共同占用同一段内存单元,在调用函数时,如果改变了形参数组的值也就是改变了实参数组的值.常用这种方法调用一个函数来改变实参数组的值. a代表二维数组首元素的地址,现在的首元素不是一个整型变量,而是有4个整型变量组成的一维数组,因此 a 代表的是首行(第0行)的首地址. (a+1)代表第1行的首地址既a[1]的首地址. a[0],a[1],a[2]既然是一维数组名,也就是这一维数组的首元素地址,因此,a[0]代表一维数组a[0]中第0列元素的地址.既&a[0][0] a[1]的值是&a[1][0],a[0]为一维数组名,该一维数组中第二个元素用 a[0]+1来表示. a[0]和*(a+0)等价,a[i]和*(a+i)等价*(a[i]+j)或*(*(a+i)+j)是a[i][j]的值 a[i]的说明: 如果a是一维数组名,则a[i]是a数组第i个元素所占内存单元的内容. 如果a是二维数组,则a[i]是代表一维数组名,他只是一个地址. 计算a[i][j]在数组中的相对位置的公式为: i*m+j (二维数组大小为n*m) a[i][j]的地址为a[0]+i*m+j 例:如果开始时指针变量p指向a[0][0],为了得到a[2][3]的值,可以用*(p+2*4+3)表示.(p+11)是a[2][3]的地址.(p是指向整型变量的,p+1所指向的元素是p所指向元素的下一元素.) P是指向一个包含m个元素的一维数组.如果p先指向a[0],则p+1不是指向a[0][1],而是指向a[1],p+i是二维数组a的第i行地址.p的增值是以一维数组的长度为单位. Int(*p)[4]表示p是一个指针变量,它指向包含4个整型元素的一维数组.即p是行指针,p的值就是该一维数组的首地址.P不能指向一维数组中的第j个元素. Int *p[4] 表示一个指针数组. C语言中对字符串常量按字符数组处理的. char *string=″I love China!“ 等价于 char *string; string=“I love china!”; string被定义为一个指针变量,只能指向一个字符变量,不能同时指向多个字符数据,是把字符串的第1个字符的地址赋值给指针变量string. 输出时用 printf(“%s\n”,string); 系统先输出字符串指向的第一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出...直到遇到字符串结束标志‘\0’为止. 指针变量a的值可以改变,输出字符串时从a当时所指的单元开始输出各个字符,直到遇到‘\
原创力文档


文档评论(0)