指针是什么
如果在程序中定义了一个变量,在程序编译时,系统会给该变量分配内存单元。这是根据变量类型分配的一定字节长度的空间。而在内存区,每个字节都有一个编号,这就是“地址”。通过地址能找到对应变量,可以说是该地址指向了该变量,所以地址被形象化地称为“指针”。意思是通过它能够找到以它为地址的内存。
指针变量
指针变量即是存放地址的变量,它用来指向另一个对象(如变量、数组、函数等)。
怎样定义指针变量
类型名 *指针变量名
如: int *pointer_1,*pointer_2;
int 是在定义指针变量的基类型。指针变量的基类型用来指定此指针变量可以指向的变量类型。
* 表示该变量为指针变量,pointer_1 为指针变量名。
怎样引用指针变量
(1)给指针变量赋值:
p=&a; //将a的地址赋予指针变量p
指针变量p的值是变量a的地址,p指向a。
(2)引用指针变量指向变量:
在已执行‘p=&a’的前提下,
printf("%d",*p);
其作用是以整数形式输出指针变量p所指向的变量的值,即a的值。
*p=1;
表示将1的值赋给p指向的变量,如果p指向a,则相当于把1赋给a,即 “ a=1; ”
(3)引用指针变量的值:
printf("%o",p);
作用是以八进制数形式输出指针变量p的值,如果p指向a,则输出的就是啊的地址,即 &a 。
注意:
(1)& 是取地址运算符,&a 就是变量a 的地址。
(2) * 是指针(间接访问)运算符,*p 代表指针变量 p 指向的对象。
指针变量作为函数参数
指针变量作为函数参数的作用是将一个变量的地址传送到另一个函数中。
如题:将两个数按大小顺序输出。用指针变量作为函数参数的函数处理。
#include <stdio.h>
void swap(int *p1,int *p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
int main()
{
int *x,*y;
int a = 5,b = 10;
x = &a;
y = &b;
if(a < b) swap(x,y);
printf("max = %d,min = %d\n",a,b);
return 0;
}
需要注意的是,上述函数只是交换了 a 和 b 的值,而 x 和 y 的值是不变的。
这说明在执行 swap 后 a,b 的值改变了但这个改变不是通过将形参值传回实参来实现的
所以不能企图通过改变指针形参的值而使指针实参的值改变
如:
#include <stdio.h>
void swap(int *p1,int *p2)
{
int *p;
p = p1;
p1 = p2;
p2 = p;
}
int main()
{
int *x,*y;
int a = 5,b = 10;
x = &a;
y = &b;
if(a < b) swap(x,y);
printf("max = %d,min = %d\n",a,b);
return 0;
}
}
C语言中实参变量和形参变量之间的数据传递是单向的 “ 值传递 ” 方式,用指针变量作为参数时同样如此。