- 1、本文档共82页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
No. 10 指针;10.1 指针和地址的概念;2.变量地址──系统分配给变量的内存单元的起始地址
Int a;
a;一个变量的地址称为该变量的指针, i。
专门用于存放另一变量的地址(即指针)的变量称为指针变量。
指针变量的值就是指针(地址)。;2.1 指针变量的定义
类型标识符 *标识符(即指针变量的名字);2 变量的指针和指向变量的指针变量;:取地址运算符,取出后随变量的内存地址。
*:指针运算符(或称为“间接访问”运算符),取出后随指针所指向变量的值。;main()
{int a,b;
int *pointer_1,*pointer_2;
a=100;b=10;
pointer_1=a;
pointer_2=b;
printf(%d,%d\n,a,b);
printf(%d,%d\n,*pointer_1,*pointer_2);
};关于“”和“*”运算符的说明:
“”和“*”的优先级别相同,结合方向为自右而左。
若先执行了语句“pointer_1=a;”,则:
* pointer_1等价于a。;3. (* pointer_1 )++等价于a++。注意括号不能省略。
* pointer_1++等价于*( pointer_1++),即先按pointer_1的原值进行*运算,得到a的值,然后使pointer_1的值改变,这样; 3.变量值的存取──通过变量在内存中的地址进行
系统执行“scanf(”%d“,num);” 时,存取变量num值的方式可以有两种:
(1)直接访问──直接利用变量的地址进行存取:例scanf(“%d”,num)的执行过程是这样的: 用变量名num作为索引值,检索符号表,找到变量num的起始地址3000;然后将键盘输入的值(假设为3)送到内存单元3000和3001中。此时,变量num在内存中的地址和值,如图10-1所示。
;(2)间接访问──通过另一变量访问该变量的值
C语言规定:在程序中可以定义一种特殊的变量(称为指针变量),用来存放其它变量的地址。
例如,假设定义了这样一个指针变量num_pointer,它被分配到4000、4001单元,其值可通过赋值语句“num_pointer=#”得到。此时,指针变量num_pointer的值就是变量num在内存中的起始地址3000。
通过指针变量num_pointer存取变量num值的过程如下:
首先找到指针变量num_pointer的地址(4000),取出其值3000(正好是变量num 的起始地址); 然后从3000、3001中取出变量num的值(3)。 ;4.指针与指针变量
(1)指针──即地址
一个变量的地址称为该变量的指针。通过变量的指针能够找到该变量。
(2)指针变量──专门用于存储其它变量地址的变量
指针变量num_pointer的值就是变量num的地址。指针与指针变量的区别,就是变量值与变量的区别。; 9.2.1 指针变量的定义与相关运算 main() { int num_int=12, *p_int;
float num_f=3.14, *p_f; char num_ch=’p’, *p_ch;
p_int=num_int;
p_f=num_f;
p_ch=num_ch;
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch); } ;
程序说明:
(1)头三行的变量定义语句──指针变量的定义
与一般变量的定义相比,除变量名前多了一个星号“*” (指针变量的定义标识符)外,其余一样:
数据类型 *指针变量[, *指针变量2……];
注意:此时的指针变量p_int、p_f、p_ch,并未指向某个具体的变量(称指针是悬空的)。使用悬空指针很容易破坏系统,导致系统瘫痪。; (2)中间三行的赋值语句──取地址运算(&)
取地址运算的格式: &变量
例如,num_int、num_f、num_ch的结果,分别为变量num_int、num_f、num_ch的地址。
注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。
例如,指针变量p
文档评论(0)