赞
踩
第六章 指针
1.什么是指针
指针是变量的内存地址 如:printf("%p",&a);//输出变量a的地址
printf("%d",*(&a));//输出该地址的数据
2.什么是指针变量
指针变量是变量用来存放地址
如何定义指针变量? int *p; p=&a;
3.指针变量为什么要求类型?
如图,两个不同类型的指针变量,他们指向的首地址是一样的,那么他们偏移长度会一样吗?
不同类型的指针变量对应单个数据所占内存长度不同,如图,不同类型的指针指向同一个变量,打印出的数据会缺失
将地址++,对应增加的长度不同,int(4个字节) char(1个字节)
4.指针的应用场景:
a).结合前面所学知识 ,函数中形参的地址和main函数中使用的变量的地址是不一样的,故如下图,要交换两个数据,要使用指针变量作为形参。
注意:p与q后面放的是地址,num1和num2是整型变量,不是数组,要获取它的地址必须加上“&”取地址符
b).固定指向某一个地址(已知八位的地址)
5.定义一个指针变量指向一维数组,并打印
指针变量遍历数组补充:当遍历一次数组后,想再次遍历数组,需要重置数组的首地址p=arr
6.指针和数组的见怪不怪
使用指针打印数组
printf("p=%d\n",*(p+i));//打印首地址的数据
printf("p=%d\n",*p++);//打印首地址的数据
若想指定打印某个数:
a)下标法
int *p=arr; printf("%d\n",p[2]);//打印数组中的第三个数
int *p=arr; printf("%d\n",p[i]);//打印数组中的第i个数
b)数组名法
int *p=arr; printf("%d\n",*(a+2));//数组a的第三个数据
错误写法:int *p=arr; printf("%d\n",*a++); //编译不过数组a为常量,无法像p指针变量进行自加
7.关于指针的sizeof
对于指针变量,长度恒定为8字节
练习:函数封装,形参包含指针,打印一维数组结合练习
练习:逆序输出数组
调用:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。