首页 > 其他 > 详细

C Primer Plus之指针

时间:2015-12-21 12:21:19      阅读:217      评论:0      收藏:0      [点我收藏+]

   c之精髓——指针(pointer)——用来存储地址的变量。一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。

   一元运算符&可以取得变量的存储地址,一个变量的地址可以被看作是该变量在内存中的位置。

   地址运算符&:后跟一个变量名时,&给出该变量的地址。

   间接运算符*:当后跟一个指针名或地址时,*给出存储在被指向地址中的数值。

   指针声明,举例如下:

int * pi;
char * pc; // pc所指向的值(*pc)是char类型的,而pc本身又是什么类型?我们把它描述为“指向char的指针”类型。指针是一种新的数据类型
float * pf, * pg; 

   类型标识符表明了被指向变量的类型,而星号(*)表示该变量为一指针。声明int * pi;的意思是pi是一个指针,而且*pi是int类型的。

  

   数组名同时也是该数组首元素的地址。也就是说,如果flizhy是一个数组,那么flizhy == &flizhy[0]; flizhy和&flizhy[0]都代表首元素的内存地址。

  1. 指针的数值就是它所指向的对象的地址。地址的内部表示方式是硬件来决定的。很多计算机(包括PC机和Macintosh机)都是以字节编址的,这意味着对每个内存字节顺序进行编号,对于包含多个字节的数据类型,比如double类型的变量,对象的地址通常指的是其首字节的地址
  2. 在指针前运用运算符*就可以得到该指针所指向的对象的数值
  3. 对指针加1,等价于对指针的值加上它所指向的对象的字节大小

   数组和指针之间的密切关系:可以用指针标识数组的每个元素,并得到每个元素的数值。从本质上来说,对同一个对象有两种不同的符号表示方法。c语言标准在描述数组时,确实借助了指针的概念。例如:定义ar[n]时,意思是*(ar + n),即“寻址到内存中的ar,然后移动n个单位,再取出数值”。

   

   在函数原型或函数定义头的场合中(并且也只有在这两种场合中),可以用int * ar代替int ar[]

int sum(int * ar, int n); 
int sum(int ar[], int n);

 

    c提供了8种基本的指针操作:(了解就好)

  1. 赋值——可以把一个地址赋给指针。通常使用数组名或地址运算符&来进行地址赋值。(注意:地址应该和指针类型兼容。也就是说,不能把一个double类型的地址赋给一个指向int的指针。c99允许使用类型指派这样做,但是我们不推荐使用这种方法。)
  2. 求值或取值——运算符*可取出指针指向地址中存储的数值。
  3. 取指针地址——指针变量同其他变量一样具有地址和数值,使用运算符&可以得到存储指针本身的地址。

 

C Primer Plus之指针

原文:http://www.cnblogs.com/yerenyuan/p/5062961.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!