指针的初步学习
1.指针变量
把内存分成字节,可以存储八位信息,每个字节都有一个唯一的地址。如下所示,如果内存中有n个字节,地址可以看作是从0到n-1的数字。
地址
内容
0
01010011
一个
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,它意味着指向我所在的空间。你可以想象把我放在一个固定的柜子里。p表示机柜的位置。
因此,*p和我不仅具有相同的值。* p的变化也会改变I的值。
要求实现一个计算输入的两数的和与差的简单函数。的例子
void sum_diff(float op1、float op2、float *psum、float *pdiff)
{
* psum=op1 op2
* pdiff=op1-op2;
}
有如
*psum和*pdiff
传入变量的地址。您可以在函数中操作存储在变量空间中的东西,而无需函数传入值然后返回值。
就像知道柜子在哪里一样,我们用这个功能来存放、取出和更换柜子里的东西。
3指针赋值
语言允许指针与赋值操作符一起复制,但是这两个指针需要是相同的类型。
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变量本身。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/92781.html