指针变量的定义

在程序执行过程中,由于是通过变量的地址来找到存储变量值的内存单元从而取的变量的值,因此将变量的地址又称为变量的指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
void test1();
int main()
{
test1();
system("pause");
return 0;
}

void test1()
{
int num = 100;
//取变量地址用&
//&num代表标量的num的起始地址
printf("%p", &num);//输出num的起始地址

//需求:定义一个指针变量 保存num的空间地址
//在定义的时候:*说明p是指针变量 而不是普通变量
int *p=NULL;
printf("sizeof(p)=%d\n", sizeof(p));//输出指针占用的字节数

//num的地址与p建立关系
p = &num;
//效果演示
printf("num=%d", num);//100
//使用中:*p表示取p报存的地址编号对应的空间内容
printf("*p=%d", *p);//100


}

注意:

定义指针变量时,应该注意以下两个问题。

  1. 在定义格式中,标识符前的*只是一个符号,表示其后的变量是一个指针变量。
  2. 指针变量的类型必须与其指向的变量类型一致,否则会出错。

例如以下这段代码就是出错的

1
2
float x;
char *p1=&x;

运算符*是指针运算符,用于访问指针变量所指向的变量。

例如

1
2
3
int n=36;
int *p1;
p1=36;

其中,*p1yun等价,可用间接方式访问n,即用 *p1代表n,语句“ *p1=36;”与“n=36;”等价。

有趣的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
int m = 30, n = 60, * p;
p = &m;
printf("%d,%d\n", m, *p);
*p = 230;
printf("%d,%d\n", m, *p);
p = &n;
*p = 780;
printf("%d,%d\n", n, *p);
return 0;
}
运行结果
30,30
230,230
780,780

同一个指针可以变量可先后指向不同的变量。

例题:使用指针变量编写:交换两个变量的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int a, b, c, * p1, * p2;
p1 = &a;
p2 = &b;
printf("输入整型变量a和b的值:");
scanf("%d,%d", p1, p2);
printf("交换前a和b的值分别是:");
printf("%d,%d\n", *p1, *p2);
c = *p1;
*p1 = *p2;
*p2 = c;
printf("交换后a和b的值分别是:");
printf("%d,%d\n", *p1, *p2);
return 0;
}
程序运行情况如下(假设a和b分别输入5和8):
输入整型变量a和b的值:5,8
交换前a和b的值分别是:5,8
交换后a和b的值分别是:8,5

that is all,thanks!

更新于

请我喝[茶]~( ̄▽ ̄)~*

罗梓丰 微信支付

微信支付

罗梓丰 支付宝

支付宝