好长时间没往下学习了,要继续了,刷题真心没意思呀…
话不多说,捞干的来!
关于指针 03
这里面讲的基本都是对以前忘了的知识进行复习了。
讲一下我这几天复习的指针的用法
1、指针指向变量:
使用指针能够访问变量的储存单元,所以,使用指针能够改变主调函数的变量的值,例如,下面的代码:
#include <stdio.h>
void f(int *a);
int main ()
{
int i=20;
int *p;
p=&i;
printf ("%d\n",*p);
f(&i);
printf ("%d\n",i);
return 0;
}
void f(int *a)
{
*a*=10;
}
这里面有几点要说明:
1、指针变量需要进行赋值,并且赋的值是一个变量的地址。
2、这里面还用指针把i转换了,因为输入的是i的地址,所以,在自定义函数中就改变了i的值。指针的作用之一:用指针改变主调函数中的值。
2、指针指向数组:
例如下面的代码:
#include <stdio.h>
void f(int *a);
int main ()
{
int a[2]={1,23};
int *p;
p=a;
printf ("%d\n",*p);
f(a);
return 0;
}
void f(int *a)
{
printf ("%d",a[1]);
}
在上面的程序里面,还是有几点要强调:
1、因为数组的名就是地址,所以在给指针变量赋值的时候不用取址符。
2、与此同时输入自定义函数的时候也是不需要取址符。
3、数组的名就是数组的地址,把数组的地址赋值给指针变量,指针变量代表的就是数组的第一个元素。所以代码里面主函数输出的值就是a【0】=1;
4、当把数组的名输入进自定义函数的时候,数组内所有的元素都进去了,所以数组内的所有元素在自定义函数内都能正常使用!(这只是我的猜想!)
指针的应用场景:
应用场景一:两个数值的交换(only一个例子,还有很多例子呢!)
#include <stdio.h>
void f(int *x,int *y);
int main ()
{
int a=10;
int b=20;
printf ("%d %d\n",a,b);
f(&a,&b);
printf ("%d %d",a,b);
return 0;
}
void f(int *x,int *y)
{
int i=*x;
*x=*y;
*y=i;
}
1、先开始是输出10 20 之后引用f()函数,在自定义函数里面将两个数值交换 则,输出的就是20 10了(要是以往,自定义函数和主函数没有啥太大关系,但是,输入地址…都懂了吧!)
2、在运算时,用指针的形式进行运算,就相当于变量进行运算。
应用场景二:通过指针返回值(除法运算)
#include <stdio.h>
int f(int x,int y,float *result);
int main ()
{
int a;
int b;
float result=0;
scanf ("%d %d",&a,&b);
if (f(a,b,&result))
{
printf ("result=%.2f",result);
}
return 0;
}
int f(int x,int y,float *result)
{
int isprime=1;
if (y==0)
{
isprime=0;
}
else
{
*result=x*1.0/y;
}
return isprime;
}
哎呀,这个程序还真不太会,但是总算打出来了,这里面生动的把指针活用了起来
1、用return返回状态,当y!=0时证明合理,返回值是1,if(1)就是正确并且可行;当y==0时,证明不合理,if(0)不能运行,直接退出。
2、用指针带回计算结果,引用函数的时候,顺便把result的值也改变了,so,输出的就是result=(x/y的值)。
这篇文章就是对以前知识的复习,毕竟,温故而知新,写了之后也是有所收获!加油!继续努力!