编程语言应用

注册

 

发新话题 回复该主题

C语言入门教程使用C语言指针操作变量 [复制链接]

1#

指针变量是一个特殊的变量,它用于存储其它变量或程序对象的内存地址。声明指针变量后,开发者可以使用“”运算符取出其它变量的内存地址,赋值给指针变量。

例如:

inta=20;

int*p;

p=a;

代码段声明了整型变量a和指针变量p,整型变量a初始化为20,指针变量p在声明时没有初始化,当前p的值为随机的内存地址,p在初始化之前是不能被使用的,否则会出现意想不到的错误。代码段的第3条语句使用“”运算符取出变量a的内存地址,赋值给指针变量p,此时指针变量p的值为变量a的内存地址。下图描述了指针变量和变量a的关系。

“”运算符用于取出变量或程序对象的内存地址,它是一个单目运算符,返回操作数的内存地址,可以赋值给类型合适的指针。

指针变量p被赋值后,它存储了变量a的内存地址,当前p和变量a都指向了同一内存地址,下面的赋值语句是效果相同的代码:

  inttemp;

  temp=a;

  temp=*p;

变量a赋值给temp,temp的值为20,我们重点看第2条赋值语句,*p是取出指针变量p指向的内存地址中保存的数据,因为p保存了变量a的内存地址,因此相当于把变量a再次赋值给了temp。

“*”运算符也是单目运算符,用于获取给定地址(指针变量保存的内存地址)中保存的数据。“”和“*”运算符与其它单目运算符的优先级相同,自右向左结合。

使用“*”运算符也可以把数据保存到指针变量指向的内存地址。例如:

*p=20;

指针变量p指向的内存地址保存的数据为20.

例指针变量的间接赋值

编程要求:声明一个整数变量x,一个整数类型的指针变量p,取出变量x的地址赋值给指针变量p,将整数20保存到p指向的内存地址,输出变量a的值。

程序清单sample.c

#includestdio.h

voidmain()

{

  intx;

  //变量x的内存地址赋值给指针变量p

  int*p=x;

  //整数20保存到p指向的内存地址

  //*p=20等价于x=20

  *p=20;

  //输出x的值

  printf("x=%d",x);

}

案例7-1演示了指针变量间接给变量x赋值的作用,指针变量p的值为变量x的内存地址,*p=20语句将整数20赋值给p指向的内存地址,p指向的内存地址即为变量x的内存地址,因此变量x被赋值为20。

例指针变量参与运算

编程要求分别声明浮点变量x和y并初始化,声明两个浮点类型的指针变量px和py,变量x的地址赋值给px,变量y的地址赋值给py,使用px和py计算变量x和y的乘积,乘积结果赋值一变量,并输出该变量的结果。

程序清单sample.c

#includestdio.h

voidmain()

{

  floatx=3.1,y=2.6;

  //变量x和y的内存地址赋值给指针变量px和py

  float*px=x,*py=y;

  //计算*px和*px的乘积

floatresult=*px**py;

  //输出x的值

  printf("x*y=%.2f",result);

}

案例7-2演示了指针变量取值和参与运算的使用方法,*px是取出px指向内存地址的数据,因为px指向变量x的内存地址,因此*px取出的数据为3.1,同理*py取出的数据为2.6.

小结:当一个指针变量和变量A的内存地址绑定后,这个指针变量实际就是变量A的一个引用,对指针变量的赋值和取值操作都是针对变量A进行的。

分享 转发
TOP
发新话题 回复该主题