一.每个变量在内存中占据一定的存储单元
1.变量的要素:变量名/变量值/存储单元.
2.操作变量:通过变量名,找到对应的存储单元,从而操作变量的值.
二.每个变量占据的存储单元都有地址
1.地址:内存区的每一个字节都有一个编号,成为地址.
2.变量类型决定对应占用内存单元的长度.
int i = 100; //整型变量占4个字节;
float f = 2.3; //单精度浮点型变量占4个字节;
char c = 'k'; //字符型变量占1个字节;
3.指针:一个变量的地址,称为该变量的指针.
4.指针变量:如果一个变量是专门用来存放另一个变量的地址(指针)的,则它称为指针变量.
int* p;
p = &i;
三.内存单元的存取/访问方式
1.变量类型决定对应占用内存单元的长度
int i=100,j=200; //占4个字节
float f=2.3 //占4个字节
2.直接访问方式:通过变量名来对内存单元进行存取操作.
printf("%d",i); 直接访问i;
3.间接访问方式:通过指针变量,找到对应的存储单元进行操作
int* p;
p=&i;
printf("%d",*p); 间接访问i
指针变量(p)的值(*p),是另一个变量(i)的地址
四.与指针变量有关的运算符
1.两个与指针变量有关的运算符
& 取地址运算符
* 指针运算符
#include <stdio.h>
int main()
{
int a = 3; //&a为变量a的地址,a的值为3
int* p = &a; //变量p的值初始化为变量a的地址
printf("int* p = &a; a = %d\n", *p); //*p为指针变量p所指向的内存单元
int b = *p + 3; //b的值?
printf("int b = *p + 3; b = %d\n", b);
int* point = &*p; //?
printf("int* point = &*p; point = %p\n", point);
int c = *&a; //?
printf("int* c = *&a; c = %d\n", c);
}
运行结果:
int* p = &a; a = 3
int b = *p + 3; b = 6
int* point = &*p; point = 008FFE84
int* c = *&a; c = 3
五.定义指针变量
1.指针变量定义示例
#include <stdio.h>
int main()
{
int i, j;
int* pointer_1, * pointer_2 = &j;//指向整型变量的指针变量;
float* pointer_3 = NULL;//指向单精度型数据的指针变量;
char* pointer_4;//指向字符数据的指针变量
printf("%d", sizeof(pointer_1));//指针在内存中用4个字节保存;
2.定义指针变量时必须指定基类型
3.在32位平台中,每一个指针变量分配4个字节的存储单元,用来存放变量的地址.
六.通过指针变量访问整型变量(举例)
#include <stdio.h>
int main()
{
int a, b;
int* p1, * p2;
a = 100;
b = 10;
p1 = &a;
p2 = &b;
printf("%d %d\n", a, b);
printf("%d %d\n", *p1, *p2);
}
运行结果:
100 10
100 10
七.指针变量"指向"运算禁忌
1.不能对未赋值的指针变量作"指向"运算
#include <stdio.h>
int main()
{
int a, b;
int* p1, * p2;
a = 100;
b = 10;
*p1 = 10;
*p2 = 100;
printf("%d %d\n", a, b);
printf("%d %d\n", *p1, *p2);
}
以上程序有错误
2.不能用整数为一个指针变量赋值
#include <stdio.h>
int main()
{
int a, b;
int* p1, * p2;
*p1 = 0x100000;
*p2 = 0x100004;
printf("%d %d\n", a, b);
printf("%d %d\n", *p1, *p2);
}
以上程序有错误
八.用指针变量将两数按先大后小的顺序输出
#include <stdio.h>
int main()
{
int a, b, * p1, * p2, * p;
scanf_s("%d %d", &a, &b);
p1 = &a;
p2 = &b;
if (a < b)
{
p = p1;
p1 = p2;
p2 = p;
}
printf("a = %d b = %d\n", a, b);
printf("max = %d min = %d", *p1, *p2);
}
运行结果:
10 100
a = 10 b = 100
max = 100 min = 10