- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c开放实验指导书
C语言开放实验指导书
第1章 指针
1.1 学习要点
1.指针变量是用来存放其它变量的地址的变量。通过指针可以访问其他变量的值。
指针变量定义的一般形式为:类型标识符 *指针变量名;
指针变量使用之前必须先赋值,指针变量的赋值只能赋予地址。未经赋值的指针变量不能使用,否则将造成系统混乱。
2. 指针变量作为函数的参数,可以实现函数之间多个数据的传递。当形参为指针变量时,其对应实参可以是指针变量或存储单元地址。
3.C语言中允许一个函数的返回值是一个指针(即地址),这样的函数称为返回指针值的函数。其定义形式为:
类型说明符 *函数名(形参表)
{
函数体语句;
}
4. 在C语言中,一个函数在内存中占用一段连续的存储空间,这段存储空间的首地址称为函数的入口地址,通过函数名就可以得到这一地址。可以把函数的入口地址赋给一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。
定义指向函数的指针变量的一般形式为:类型标识符 (*指针变量名) ( );
5. 定义一个指向一维数组的指针变量例如:int a[5]={1,3,5,7,9},*p;
p=a; //或p=a[0];
C语言规定,数组名代表数组的首地址,也就是第0个元素的地址,所以上面两个赋值语句是等价的。
如果p的初值为a则:
(1) p+i和a+i就是a[i]的地址,它们指向a数组的第i个元素。
(2) *(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。
(3) 指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。(4) 指针变量可以实现本身的值的改变,如:p++;若p原来指向a[0],执行p++后,p指向a[1]。但是a++是非法的,因为a是数组名,它是数组的首地址,是一个地址常量。
1. 二维数组的地址表示:设有定义int a[3][4]; 可以把二维数组a理解成一个一维数组, 它有3个元素: a[0], a[1], a[2],而每一个元素又是一个一维数组, 包含4个元素,如a[0]是一维数组, 它有4个元素: a[0][0], a[0][1], a[0][2], a[0][3]。
a是二维数组名,整个二维数组的首地址,也是二维数组第0行的首地址,a等价于a[0],类似的,a+1等价于a[1]代表第1行的首地址,a+2等价于a[2]代表第2行的首地址。
既然a[0], a[1], a[2]是一维数组名, 它们就代表了一维数组的首地址,因此a[0]代表了第0行第0列元素的地址,即a[0]等价于a[0][0], 类似的,a[1]等价于a[1][0],a[2]等价于a[2][0]。
假设用符号“?”表示“等价于”,因 *a ? *(a[0])? a[0] ? a[0][0],所以*a ? a[0] ? a[0][0],可以推导出:
*a+1 ? a[0]+1 ? a[0][1]
*(a+1) ? a[1] ? a[1][0]
*(a+2)+3 ? a[2]+3 ? a[2][3]
由上可以总结出:*(a+i)+j? a[i]+j ? a[i][j],代表数组元素a[i][j]的地址,而*(*(a+i)+j)? *(a[i]+j) ? a[i][j],代表数组元素a[i][j]。
’作为串的结束。通常情况下,用字符数组来存放字符串,而用字符串指针变量来指向该字符数组。
(2) 字符数组不允许进行赋值操作,而字符串指针变量可以直接赋值。
例如:char *p1,*p2=”China”; //对p2进行初始化
p1=”Welcome”; //对p进行赋值“字符型指针数组”,利用字符指针数组可以指向多个长度不等的字符串,使字符串处理起来更方便、灵活,节省内存空间。
10. 二级指针是指在一个指针变量中存放的是另一个指针变量的地址。二级指针的定义形式为: 类型说明符 **指针变量名;
例如:int x, *q,**p;
x=36; //x是一个整型变量
q=x; //q是一个指针变量,它指向整型变量x
p=q; //p是一个二级指针变量,它指向指针变量q
注意:p=x;是错误的。
11. 动态内存分配是在程序运行时为程序分配内存的一种方法。有关动态内存分配有如下3个函数:
(1) malloc函数
函数原型:void *malloc( unsigned int size);
函数功能:在内存开辟一个长度为 size 个字节的连续的存储空间, 返回一个指向该存储区首地址的指针,若系统不能提供足够的内存单元(分配失败), 函数将返回空指针NULL。
例如:int *p=NULL;
p= (int *) mall
您可能关注的文档
- BIOS设置基础详解.doc
- BIOS设置方法图觖及如何设置启动项.doc
- BIOS设置翻译图文教程.doc
- BIOS详细分解图组.doc
- BlackBerryDM黑莓手机桌面管理器使用教程方法.doc
- BlackBerry入门教程黑莓手机软件安装方法.doc
- BIOS里一些常用的功能设置.docx
- BLINK迷你无线路由器BLMP的设置方法与步骤.docx
- blos设置怎样设置第一启动盘.doc
- BLWCWM无线路由器设置方法.doc
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].docx
- 情绪价值系列报告:春节消费抢先看-国证国际证券.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(解析版).docx
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].docx
- 液冷盲插快接头发展研究报告-全球计算联盟.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(原卷版).docx
- 精品解析:北京市东直门中学2024届高三考前练习数学试卷(解析版).docx
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第2章 人体的神经调节》大单元整体教学设计[2020课标].docx
文档评论(0)