C 语言中的指针
▶ 指针变量的定义
类型标识符 *标识符
int *mypoint;
标识符就是指针的名字。
- 两个符号
&:取地址符*:指针运算符(也称 间接访问运算符)
示列:
#include <stdio.h>
int main(){
int *mypoint; // 定义一个指针
int a; // 定义一个名为a的整型
a = 10; // 给a这个变量进行赋值
mypoint = &a; // 将 a 变量的地址赋值给 mypoint 这个指针变量中去
printf("%d",*mypoint);
一个指针变量只能指向同一类型的普通变量。
使用指针变量的时候,指针变量名前没有 * 号。
▶ 指针变量变量作为函数参数
函数的参数可以是指针类型,作用是 将变量的地址传送到一个函数中 。
#include <stdio.h>
void swap(int *pdest1,int *pdest2){
int temp;
temp = *pdest1;
*pdest1 = *pdest2;
*pdest2 = temp;
}
int main(){
int a=5,b=6;
int *p1,*p2;
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d, b=%d",a,b);
}
输出:
a=6, b=5
#include <stdio.h>
void swap(int *pdest1,int *pdest2){
int *temp;
temp = pdest1;
pdest1 = pdest2;
pdest2 = temp;
}
int main(){
int a=5,b=6;
int *p1,*p2;
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d, b=%d",a,b);
}
输出:
a=5, b=5
函数参数的传递是一一对应的,单向按值传递通过指针变量来做形参实参,在第二个演示中发现被调用的函数中改变变量a和b的值,这依旧是单向传递。
实参和形参数据是单向传递的,指针变量依旧执行这个原则,调用函数 swap 时候不能改变实参的 p1 和 p2 的值,p1 依旧是指向的时a,但是可以改变实参变量内所指向的变量的值。
通过指针变量做参数,可以间接地在函数中改变指针变量所指向的变量的值,从而达到在被调用函数内改变外界变量值的效果,如果不用指针变量作为参数,就比较难做到这一点。
▶ 指针的错误使用
int *p;
*p = 5;
*p 代表 p 所指向的变量,但 p 的指向是不确定的,这就会导致系统崩溃。

浙公网安备 33010602011771号