指针的初步学习

1.指针变量

              计算机将内存分割为字节,字节可以存储八位的信息,而每个字节都有唯一的地址。如下,如果内存中有n个字节,可以把地址看作0到n-1的数

地址 内容
0   01010011
1 01110101
2 01110011

所以,在计算机中,每个变量都有相对应的字节地址。如果一个变量占有多个字节,把第一个字节的地址称作变量的地址。

由于地址的取值范围不同于整数,所以我们要用特殊的指针变量存储地址。

比如p是一个指针变量,它存储了i的地址。我们就说 p指向 i;

2.指针变量的声明

int *p;

像上述,int是个类型,*p是指针变量;它指向int型的变量;

3.取地址运算符和间接寻址运算符


上述讲了指针的声明,但是没有把指针指向对象;

如 int *p=&i;

就是把i的地址赋值给了指针变量p 即p指向i;

间接取址运算符

一旦指针变量指向了某个对象,就可以用*(间接寻址)访问对象中的内容。

如*p指向i ,i=5;

printf(“%d”,*p)就会输出5。

对于*和&,可以把*当作&的逆运算。对变量使用&运算符产生指向变量的指针(即地址),而对指针使用*运算符就可以返回到原始变量;

j=*&i与j=i 一个意思。

对于p指向i,就是指向了i所在的那个空间,可以想象把i放在一个固定的柜子里。p就是指明柜子所在的位置。

因此,*p与i不仅有相同的值。*p的改变也会改变i的值。

如例题         要求实现一个计算输入的两数的和与差的简单函数。

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}

*psum 和*pdiff

传入的是变量的地址。可以在函数里面对该变量空间里存放的东西进行操作,而不需要函数再传入值后再返回值。

就好比 知道了柜子所在的位置之后,我们通过这个函数,对柜子里面的东西进行存放和取出,更改。

3指针赋值

 c语言允许指针使用赋值运算符进行指针的复制,但是两个指针需要是相同的类型。

int i,j,*p,*q;

语句

p=&i;

q=p;

第一句是吧i的地址复制给了p;

第二句直接把p的内容赋值给了q;导致p和q的效果一样,都指向了i的地址,就是i的变量空间。

*p=*q;

不同,这句话的意思是,把q指向的变量值赋值给p指向的变量。

如上文的*可以当作&的逆运算。因此

可以这么理解:

把指向i变量的p指针,视为 p=&i;

q指向j变量,是为q=&j;

而*q就是*q=*&j

就是j变量本身。

posted @ 2021-11-14 21:40  echoesyy  阅读(47)  评论(0编辑  收藏  举报