黑马程序员——ios学习笔记 C语言 指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

指针概念

所谓变量的指针实际上指变量的地址。变量的地址虽然在形式上好象类似于整数但在概念上不同于以前介绍过的整数它属于一种新的数据类型即指针类型。一般用指针来指明这样一个表达式&x的类型,而用地址作为它的值,也就是说x为一整型变量则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。同样double d;&d的类型是指向以精度数d的指针,&d的值是双精度变量d的地址。所以指针和地址是用来叙述一个对象的两个方面。虽然&x&d的值分别是整型变量x和双精度变量d的地址&x&d的类型是不同的一个是指向整型变量x的指针而另一个则是指向双精度变量d的指针。在习惯上,很多情况下指针和地址这两个术语混用了。 

指针变量的一般定义为

类型标识符 *标识符          int *ip;

其中标识符是指针变量的名字标识符前加了*,表示该变量是指针变量而最前面的类型标识符表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量也就是讲我们不能定义一个指针变量既能指向一整型变量又能指向双精度变量。 

在指针变量中只能存放地址,因此,在使用中不要将一个整数赋给一指针变量。下面的赋值是不合法的

int *ip; 
ip=100; 

指针变量和一般变量一样,存放在它们之中的值是可以改变的,也就是说可以改变它们的指向即:

int i, j, *p1, *p2;
i='a'; 
j='b'; 
p1=&i; 
p2=&j; 

通过指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变量要费时间,而且不直观,因为通过指针要访问哪一个变量,取决于指针的值(即指向), 

int x, y *px=&x; /*指针变量px指向整数x, 则*px可出现在x能出现的任何地方*/
y=*px+5; /*表示把x的内容加5并赋给y*/ 
y=++*px; /*px的内容加上1之后赋给y [++*px相当于++(*px)]*/ 
y=*px++; /*相当于y=*px; px++*/ 


地址运算 

指针允许的运算方式有

(1). 指针在一定条件下,可进行比较,这里所说的一定条件是指两个指针指向同一个对象才有意义例如两个指针变量p, q指向同一数组<, >, >=,<=, ==等关系运算符都能正常进行。若p==q为真则表示p, q指向数组的同一元素p

(2). 指针和整数可进行加、减运算。设p是指向某一数组元素的指针,开始时指向数组的第0号元素n为一整数p+n就表示指向数组的第n号元素(下标为n的元素)。不论指针变量指向何种数据类型指针和整数进行加、减运算时,编译程序总根据所指对象的数据长度对n放大在一般微机上, char放大因子为1, intshort放大因子为2, longfloat放大因子为4, double放大因子为8。对于下面讲述到的结构或联合也仍然遵守这一原则。

(3). 两个指针变量在一定条件下,可进行减法运算。设p, q指向同一数组,p-q的绝对值表示p所指对象与q所指对象之间的元素个数。其相减的结果遵守对象类型的字节长度进行缩小的规则。

指针的应用:

 

{
char c='A';    //定义变量
int i=123;
float f=3.45;
 
char *cp;<span style="white-space:pre">	</span>//定义指针
int *ip;
float *fp;
 
cp=&c;<span style="white-space:pre">		</span>//指针赋值
ip=&i;
fp=&f;
 
printf(%c\n,*cp);  //验证结果
printf(%d\n,*ip);
printf(%f\n,*fp);
}
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值