C指针的值和地址.doc

C指针的值和地址.doc

ID:62172933

大小:255.50 KB

页数:8页

时间:2021-04-20

C指针的值和地址.doc_第1页
C指针的值和地址.doc_第2页
C指针的值和地址.doc_第3页
C指针的值和地址.doc_第4页
C指针的值和地址.doc_第5页
资源描述:

《C指针的值和地址.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录(?)[-]1.指针和指向的变量2.改变指针的内容1.指针内容和指针指向的内容变量2.通过指针赋值的形式改变指针内容3.将指针作为函数参数改变指针内容在C语言中,函数传参分为两种:传址和传值。传值是一个复制的过程。传址对于变量和对象来说是传址,而针对于同一级的指针来说也是传值。传址针对的对象是指针指向的对象,此时对指针的一切行为都是为了间接的操作指针所指向的对象。但如果想要操作指针本身的内容值,那么就需要在指针层面再往下一层,让指针本身上升为变量的地位,让深一层的指针(二级指针)指向指针变量,二级指针在函数参数作为输出参数时用得较广

2、。 1指针和指向的变量     指针是C语言数据类型中一种独立的数据类型:指针类型。作为C语言的精华,当定义一个指针变量时,此变量的作用就是用来存相应数据结构(变量、函数)的地址。然后通过变量的地址(指针变量的值)取地址内容的方式(*指针变量)访问(读、写)相应的变量。如定义一个整形变量和一个整形指针,用指针指向整形变量。[plain] viewplaincopyprint?1.int i;  2.i = 1;  3.int *p = NULL;  4.p = &i;  5.*p = 2;                此小段程序的功能

3、就是通过指针p访问所指向的i,并通过p改变了所指向的变量i的内容。p地址通过取地址内容符*就能访问地址中存的变量了(变量作为地址的内容)。它们的关系如下i,p的关系如下: 图1指针和变量       指针本身作为一个变量,也有自己的地址。指针作为一种特殊的变量作用是用来存地址,指针获取数据结构的地址之后可以通过指针变量访问(读写)到对应的数据结构。通过*p的形式访问的是变量,改变的是指针存的内容中的内容。如上图中,*p=2;时是通过指针p改变的0x0001(指针值)中的i(0x0001地址中存的内容)的值。 2改变指针的内容     试

4、想一下,在外定义一个指针变量p1,并将它指向某个变量(var)。当向函数传递一个一级指针时,它传递给函数指针参数p2的是var变量的地址,如果在函数内对p2操作的代码是*p2(访p2地址中的内容),那么所涉及的内容都是var变量;如果在函数内对p2的操作代码是p2,如p2=var1(另一个变量),那么只能代表p2指向的目标变量发生了变化,p2的值也发生了变化。综上,对p2的任何操作都跟外部定义的指针p1无关,p1不会受到任何影响。 2.1指针内容和指针指向的内容(变量)       指针内容是指指针的值,是指针指向内容的地址(如i的地址

5、0x0001)。指针指向的内容是指指针指向的那个变量(如p指向的是变量i)。 2.2通过指针赋值的形式改变指针内容       同类型的指针可以相互赋值。被重新赋值的指针内容就会被改变,然后就可以访问到新指针内容的变量。如[plain] viewplaincopyprint?1.int i = 1;  2.int j = 2;  3.int *p1 = NULL, *p2 = NULL;  4.p1 = &i;  5.p2 = &j;  6.p1 = p2;  7.//Do something   原本p1指向i,存i的地址;p2指向j

6、,存j的地址;p1=p2时,两个指针指向同一块内存,都是存的变量j的地址,两个指针都可以访问到变量j。 这是两个指针在同一个作用域内指针内容改变的形式:指针赋值即可改变。那么如何让一个函数来改变指针的值呢? 2.3将指针作为函数参数改变指针内容传址函数 voidfun(int*p);根据图1知,调用函数fun(p);//(p=&i)      形参为地址(指针)时,函数传参为传址方式即将指针的内容(一个变量的地址)传了进去。然后通过*p(函数参数)操作的都是传进来那个地址所存的变量,而对于这个函数来说,此地址对应的变量的作用域和生存期都

7、还在,这样就间接的操作了传进地址中存的变量,改变的当然是变量(p所指向的变量i了),但未能改变实参指针p的内容(指针内容)。                所以,如果要改变指针的内容且通过将自己作为函数的参数来实现,那就要使作用域比传入指针变量作用域小的指针访问传入指针的指针内容(说起来有点绕)。图示记录图2二级指针和指针关系所以,经过fun(&p1)之后,p1指针内容自然就被改变指向变量j了。这样就实现了指针作为函数参数传入后指针内容被改变。此种方式在程序设计的时候可以采用的^-^。需要做到的一点就是让外部指针的地址作为函数指针参数的

8、值,即函数指针参数在一级指针(*p)形式下所访问的是外部指针变量。函数指针参数的二级指针(**p)形式才是访问外部指针所指向的变量。 CNoteOver。p,&p,*p的区别一、区别 intz=0; int

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。