一、指针变量的定义
格式 :变量类型 *指针变量名
举例 int *p ; char p;
注意:定义变量的时候仅仅是指针变量的象征
#include <stdio.h>
void change(int);//函数的声明
int main()
{
/*
int a = 90;
change(&a);
printf("a=%d\n", a);//10 因为传的是地址,所以可以修改外部变量
*/
// 基本数据类型的格式:变量类型 变量名;
// 指针格式:变量类型 *变量名;
// 指针变量只能存储地址
// 指针就一个作用:能够根据一个地址值,访问对应的存储空间
// 指针变量p前面的int:指针变量p只能指向int类型的数据
int *p; // 定义了一个指针变量p
int a = 90;
// 指针变量p指向了变量a
p = &a; // 指针变量只能存储地址
*p = 10; //这个*的意义跟前面指针的定义含义是不一样的,定义的时候*只是一个标识,告诉编译器这是一个指针,而这里的*的含义是访问指向变量p指向的存储空间
printf("%d\n", *p);
//printf("%d\n", a);
return 0;
}
void change(int n)
{
n = 10;
}
二、利用指针变量简单修改其他变量的值
1.指向某个变量
int a;
int *p;
p = &a;
或者
int *p = &a;
2.修改所指向变量的值
*p = 10;
3.在函数内部修改外面变量的值
int a = 10;
change(&a);
void change(int *n)
{
*n = 20;
}
三 指针的注意事项
#include <stdio.h>
int main()
{
/* 不建议的写法, int *p只能指向int类型的数据
int *p;
double d = 10.0;
p = &d;
*/
/* 指针变量只能存储地址
int *p;
p = 200;
*/
/* 指针变量未经过初始化,不要拿来间接访问其他存储空间
int *p;
printf("%d\n", *p);
*/
/*
int a = 10;也可以用下面两句
int a;
a = 10;
*/
/*
int *p;
p = &a;//这两句也可以用下面一行代替
// 定义变量时的*仅仅是一个象征,没有其他特殊含义
int *p = &a;
*/
// 不正确的写法
// *p = &a; //此时的*的含义是访问指向变量p指向的存储空间
p = &a;
// 这个时候的*的作用:访问指向变量p指向的存储空间
*p = 20;
char c = 'A';
char *cp = &c;
*cp = 'D';
printf("%c\n", c);
return 0;
}
指向指针的指针
#include <stdio.h>
int main()
{
int a = 10;
int *p = &a;
int **pp = &p;
**pp = 20;
printf("%d\n", a);
return 0;
}
指向指针的指针示意图
09-指向指针的指针.png
空指针
#include <stdio.h>
int main()
{
double d = 10.5;
double d2 = 10.5;
double *p;
p = &d;
*p = 10.9;
p = &d2;
*p = 10.9;
printf("d=%f, d2=%f\n", d, d2);
// 清空指针
p = 0;
// p = NULL;
// 清空指针后,不能再间接访问其他存储空间
// *p = 100.7;
return 0;
}
交换函数外面实参的值
#include <stdio.h>
void swap(int *v1, int *v2);
int main()
{
int a2 = 90;
int b2 = 89;
swap(&a2, &b2);
printf("a2=%d, b2=%d\n", a2, b2);
return 0;
}
/* 不能交换外面实参的值,仅仅是交换了内部指针的指向
void swap(int *v1, int *v2)
{
int *temp;
temp = v1;
v1 = v2;
v2 = temp;
}*/
// 完成两个整型变量值的互换
void swap(int *v1, int *v2)
{
int temp = *v1;
*v1 = *v2;
*v2 = temp;
}
/* 交换的只是内部v1、v2的值
void swap(int v1, int v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}*/
// 任何指针都占用8个字节的存储空间
char *cp;
int *ap;
long *bp;
%d int
%f float\double
%ld long
%lld long long
%c char
%s 字符串
%zd unsigned long
网友评论