指针就是地址
指针变量就是存放地址的变量
指针概念
地址的引入
A:你好,请问这附近哪里有花店?
B:有“菊花台”花店。
A:请问“菊花台”花店在哪里?
B:中山路102号
int juhuatai=10; 通过变量名直接访问变量
地址:scanf("%d",&juhuatai);
一.变量的访问有两种方式:
1.变量名
2.地址
int juhuatai;
int meiguitai;
printf("ju=%d\n",juhuatai);
printf("mei=%d\n",meiguitai);
printf("ju的地址是:%p",&juhuatai);
printf("mei的地址是:%p",&meiguitai);
//二.& 取地址 取变量名所代表的变量的内存地址
printf("通过地址的方式获取:ju=%d",*(&juhuatai));
printf("通过地址的方式获取:meicc=%d",*(&meiguitai));
//三.* 此时*代表的是一个运算符,根+-*/运算符类似,该运算符的功能是取出内存中数据的值(取内容)
指针=地址
指针变量
int a=10; //整型变量
a=100;
char c='b'; //字符变量
int array[3]={1,2,3}; //数组变量
int* p; //定义一个指针变量 存放的是地址
p=&a; //给指针变量赋值
*p=&a //错误的!!!这么写是狗!!!
int* p2=&a; //定义并初始化一个指针变量
//a c array有何异同点
共同点:
a c array都是变量
不同点
变量的类型不同
a 整型变量
c 字符变量
array 数组变量
问:什么变量能存放地址,存放的是地址变量
答:指针变量存放的是地址
问:怎么才能定义一个指针变量
答:int *p;
char *q;???
int* p 指针变量 存放的是地址
归纳分析:
- 指针变量就是存放地址的变量
- 只有在定义一个指针变量的时候,才是一个指针的标识符其他情况,都是一个运算符
指针访问变量
int juhuatai=10;
int meiguitai;
mieguitai=9;
int *p=&juhutai;
int *q;
q=&meiguitai;
printf("ju=%d\n",juhuatai);
printf("mei=%d\n",meiguitai);
printf("ju的地址是:%p\n",p);
printf("mei的地址是:%p\n",q);
//二.& 取地址 取变量名所代表的变量的内存地址
printf("通过地址的方式获取:ju=%d\n",*p);
printf("通过地址的方式获取:meicc=%d\n",*q);
//三. 此时*代表的是一个运算符,根+-*/运算符类似,该运算符的功能是取出内存中数据的值(取内容)
指针分类
int a=10;
char c='A';
int *p1=&a;
int *p2=&c;
printf("a=%d\n",*p1); //一.指针访问整数
printf("a=%c\n",*p2); //二.指针访问字符
//指针++
printf("a的地址打印:%p\n",p1);
printf("a的地址++打印:%p\n",++p1);
printf("c的地址打印:%p\n",p2);
printf("c的地址++打印:%p\n",++p2);
int array[3]={1,2,3};
//数组 关心的是数组的·首地址 两种方式:1.数组名=地址 2.第一个元素的地址
printf("第一个元素的地址是:%p\n",&array[0]);
printf("第一个元素的地址是:%p\n",&array[1]);
printf("第一个元素的地址是:%p\n",&array[2]);
for(int i=0;i<3;i++)
{
printf(" %d ",array[i])
}
int *parray;
parray=&array[0]; //指针访问数组
//parray=array;
//printf("第一个元素的地址是:%p\n",parray++);
//printf("第一个元素的地址是:%p\n",paray++);
//printf("第一个元素的地址是:%p\n",parray);
for(int i=0;i<3;i++)
{
printf(" %d ",*parray);
//printf(" %d ",parray[i]);
array++;
}