- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章_指针完全讲解
指针 内容提要 指针的概念; 难点:对指针数据类型的理解 数组的下标法引用和指针法引用; 难点:二维数组的地址和指针概念 利用字符指针存取字符串; 难点:字符数组和字符指针的区别与联系 指针数组应用; 难点:指向数组的指针与指针数组的区别 带参数的main函数; §10.1地址和指针的概念 内存区的每一个字节有一个编号,这就是“地址” 。 程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元,但是没有赋值。 “直接访问”方式:按变量地址存取变量的值 “间接访问”的方式:将变量i的地址存放在另一个变量中 例如 “间接访问”的方式:将变量i的地址存放在另一个变量中。 在C语言中,指针是一种特殊的变量,它是存放地址的。 可以通过语句: int i; i_pointer =&i; 指针和指针变量的定义: 一个变量的地址称为该变量的“指针”。 指针变量的值(即指针变量中存放的值)是地址(即指针)。请区分“指针”和“指针变量”这两个概念。 §10.2 变量的指针和指向变量的指针变量 10.2.1 定义一个指针变量 指针变量的定义包括三个内容: 指针类型说明,定义变量为一个指针变量; 指针变量名; 变量值(指针)所指向的变量的数据类型, 基类型。 其一般形式为:类型说明符 *变量名; 其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。 下面都是合法的定义: float *pointer_1;// pointer_1是指向float型变量的指针变量 char *pointer_2;//pointer_2是指向字符型变量的指针变量 可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。如: float i; char j; pointer_1=i; pointer_2=j; *pointer_1=i; 注意 指针变量前面的“*”,表示该变量的类型为指针型变量。 例: float *pointer_1; 指针变量名是pointer_1 ,而不是* pointer_1 。 在定义指针变量时必须指定基类型。 float a; int * pointer_1; pointer_1=a; 10.2.2 指针变量的引用 指针变量中只能存放地址(指针), 不要任何其他非地址类型的数据赋给一个指针变量。 例10.1 通过指针变量访问整型变量 对“&”和“*”运算符说明: a=3;a=23f1;pointer_1=&a; &* pointer_1的含义是什么? *a含义是什么? y=(* pointer_1) ++ y=++* pointer_1 y=* pointer_1++ y=* (pointer_1++) y=* ++pointer_1 &* pointer_1的含义是什么? “&”和“*”两个运算符的优先级别相同,右结合 * pointer_1= a *&a的含义是什么? 先进行&a运算,得a的地址,再进行*运算。即&a所指向的变量,也就是变量a。 *&a和*pointer_1的作用是一样的,它们都等价于变量a。即*&a与a等价。 (*pointer_1)++和*pointer_1++的区别? (*pointer_1)++相当于a++。 *pointer_1 ++ ,从附录可知:++和*为同一优先级别,而结合方向为自右而左,因此它相当于*(pointer_1 ++)。由于++在pointer_1的右侧,是“后加”,因此先对pointer_1的原值进行*运算,得到a的值,然后使pointer_1的值改变,这样pointer_1不再指向a了。 #include stdio.h void main() { int *p1,*p2, p, a, b; scanf(%d,%d,a, b); p1=a; p2=b; if (ab) { p=*p1 ; *p1=*p2; *p2=p; } printf (\na=%d, b=%d\n, a, b); printf (“max=%d, min=%d\n”, *p1, *p2); printf (“\na=%d, b=%d\n”, &a, &b); printf (max=%d, min=%d\n, p1, p2); } 注意:三种错误表示方法 void swap (int *p1, int *p2) { int *temp; *temp=*p1; *p1=*p2; *p2=*temp; } void main() { int a,
文档评论(0)