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 的指向是不确定的,这就会导致系统崩溃。

posted @ 2024-09-29 19:31  takenika  阅读(61)  评论(0)    收藏  举报