C 指针介绍

On 2010 年 7 月 17 日, in 程序人生, by donly

指针(pointer)的定义:在信息工程中,指针是一个用来指示一个内存地址的变量或中央处理器(CPU)中的寄存器(Register)。在 C 语言中,指针就是一个存储着变量地址的变量。

与指针相关的操作运算符

  • &:地址运算符,后跟一个变量表示该变量的地址。比如:&foo 得到的是变量 foo 的地址。
  • *:间接运算符,后跟一个指针名或地址表示存储在被指向地址中的值。比如;p = &foo, *p 为 foo 的值。

指针声明

因为指针是一个变量,其保存的变量地址的那个变量有相应的数据类型,不同的变量类型占用的储存空间大小不同,所以必须说明指针所指向变量的数据类型。指针的声明如下:


int * foo; // foo 是指向一个整型变量的指针
float * bar; // bar 是指向一个浮点变量的指针

类型标识符 int 说明被指向变量的类型,而不是此指针变量的数据类型,它是一种新的数据类型。星号(*)说明此变量是一个指针。代码书写规范:* 和指针名之间的空格可选,通常在声明时加上,作为间接运算符取值使用时省略。

指针在函数间的通信示例


[cc lang=”c”]
/* pointer.c — 使用指针交换变量 */
#include
void change (int *, int *); // 声明函数
int main (void)
{
int a, b; // 声明两个整型变量
printf (“Please input two int numbers:n”);
scanf (“%d%d”, &a, &b); // 为两变量赋值
printf (“Before change a = %d and b = %d.n”, a, b);
change (&a, &b); // 向函数传递地址
printf (“After change a = %d and b = %d.n”, a, b);
return 0;
}

void change (int * x, int * y) // 函数定义
{
int temp; // 声明一个整型的临时变量
temp = *x; // 将指针类型的参数 x 指向的数值赋给 temp
*x = *y; // 将指针 x 指向 y 指向的数值
*y = temp; // 将指针 y 指向 temp 即 x 指向的数值
// 因 x 为 main 中 a 的地址,y 为 b 的地址
// 至此已完成两值的交换
}
[/cc]

========================分割线========================

理解指针的相关概念,弄清楚变量名称,地址和数值之前的关系至关重要。变量地址一般只由计算机处理,当然你也可以打印出来以满足好奇心。一般也只有低级语言(比较接近机器语言,如汇编和C)才有指针这一概念,面向对象语言如 Java 一般避免使用指针。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注