<1>指针
(1)指针基本概念
1)引入:提出问题:
-
如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量
2)回顾scanf函数功能
-
格式:scanf("%d",&i)
-
深入探讨:scanf()的原型应该是怎样的?我们需要一个参数能保存别的变量的地址,如何表达能够保存地址的变量?
3)提出指针
-
指针定义:保存地址的变量
举例:
int i;
intp=&i;
1.//p表示指针;表示p是一个指针,它指向int;现在我们将i的地址交给p
通俗来讲:我们有一个变量i和一个变量p,p是指针,p获得的值是i的地址,也就是p指向i
2.//细节:同时我们应明确p是一个整体,p是一个int,于是p是一个指针
(2)指针变量
1)概念明晰
- 变量的值是内存的地址
- 普通变量存放的是实际的值
- 指针变量的值是具有实际值的变量的地址
//也就是说指针变量里存储的是地址,指向其他实际的变量;而普通的变量中存放的就是实际的值
2)作为参数的指针
1.相关概念及意义
- 示例:void f(int*p);
- 实际意义:在被调用时得到了某个变量的地址;
重点:当我们在调用f函数时,我们就要交给它一个地址而不能是变量本身——示例:int i=0;f(&i);
同时我们以一段代码为例:
#include<stdio.h>
void f(int p);//对函数进行原型声明
int main(){
int i=6;
printf("&i=%p\n",&i);//将i的地址取出来交给f函数
f(&i);
return 0;
}
void f(intp)
{
printf("p=%p\n",p);
}
从整体进行理解:在main函数中有一个变量i,值为6,地址为70;我们把这个地址取出来交给另外一个f函数中的变量p,p的值是70;于是我们可以说p是一个指针指向i
3)访问地址上的变量*
-
1.相关概念:
*是一个单目运算符,用来访问指针的值所表示的地址上的变量;
<2>指针的使用
1>相关应用情景
(1)应用场景1——交换两个变量的值
-
代码示例:
void swap (int *pa , int pb){
int t=pa;
pa=pb;
*pb=t;
}// 1.定义swap函数;
2.//在主函数中对函数进行调用swap(&a,&b);
3.//输出a,b交换之后的值;
(2)应用场景2——函数返回多个值
-
传入的参数实际上是需要保存带回的结果的变量;
-
函数返回多个值,就需要使用指针
1)我们以一段代码为例(针对函数返回多个值的情况):
示例:输出最大值和最小值
(3)应用场景3——
-
函数返回运算的状态,结果通过指针返回;
-
通常情况下会让函数返回特殊的但不属于有效范围的值表示出错:常见示例-1或0;
-
但是也会存在特殊情况:即返回的任何数值都是有效的可能结果,就会采用分开返回的方法;
2>易错点
-
(1)定义的指针变量没有指向任何变量便直接使用指针
1.我们以一段代码为例:
int i=6;
int *p;
int k;
k=12;
*p=12;
2.出错原因
在这段代码中,我们并未对p进行初始化(本地变量不会默认初始化),p未与任何变量联系在一起被赋予一个有效的值,所以在此处对p进行赋值的操作是错误的,它可能会指向不定的位置;
3.总结
任何一个地址变量在没有赋值之前(没有得到任何实际的变量之前),都不能通过*p来访问任何数据
标签:变量,示例,int,及其,地址,函数,应用,指针 From: https://www.cnblogs.com/QingYuY/p/17868671.html