- 相信很多小伙伴在接触C语言时,在函数、数组以及指针这里都觉得有点难度,特别是指针的使用还是挺绕的,大一到大二上学期我也一直在苦苦研究C语言,到目前为止,就简单的做一下总结。
- 函数:简单来说就是封装,将实现的各个功能写在不同的函数中,以方便使用,函数书写有两种方式,实例代码如下:
#include
void Avg(); int Sum(); //第一种方法先声明函数,然后就可以先写main函数 int main() //主函数main { int a=5,b=7; int sum; sum=Sum(a,b); //调用函数,因为Sum函数要接收两个变量,因此 //必须传递两个int型变量给它,定义一个int型sum变量接收 printf("数的和:%dn",sum); Avg(sum); //调用无返回值函数,无需变量接收 system("pause"); return 0; } int Sum(int a,int b) //实现求和功能的函数,接收调用者提供的两个int类型变量a和b,有返回值,且 //返回值类型为int型,因此我们主函数在调用时应该用一个int型变量来接收,然后在主函数输出 { int sum; sum=a+b; return sum; } void Avg(int sum)//实现求平均数功能的函数,接收一个变量sum,没有返回值,因此直接在本函数内进行输出即可 { double avg; avg=sum/2.0; printf("平均数:%.2fn",avg); } 下面是第二种方法:
#include
//第二种方法,无需先声明函数,将主函数main放到最后面即可 int Sum(int a,int b) //实现求和功能的函数,接收调用者提供的两个int类型变量a和b,有返回值,且 //返回值类型为int型,因此我们主函数在调用时应该用一个int型变量来接收,然后在主函数输出 { int sum; sum=a+b; return sum; } void Avg(int sum)//实现求平均数功能的函数,接收一个变量sum,没有返回值,因此直接在本函数内进行输出即可 { double avg; avg=sum/2.0; printf("平均数:%.2fn",avg); } int main() //主函数main { int a=5,b=8; int sum; sum=Sum(a,b); //调用函数,因为Sum函数要接收两个变量,因此必须传递两个变量给它,定义一个int型sum变量接收 printf("数的和:%dn",sum); Avg(sum); //调用无返回值函数,无需变量接收 system("pause"); return 0; } -
指针:简单来说就两部分,指针变量和地址,例如int *p,这样子是同时声明了指针变量和地址,指针是通过地址来得到值
-
我们都知道int后面接的是变量名,因此整体上来看,*p是指针变量,p就是该变量的地址,也就是我们要输出指针的值应该是printf("%d",*p)而不是printf("%d",p),printf("%d",p)输出的只是*p的地址。
-
详情解释代码如下:
#include
//对于赋值给指针,只要获取得到变量的地址,那么就得到了该值 int main() { int a=3; int *p; p=&a; //将a的地址给指针p printf("值:%d,地址:%dn",*p,p); //输出值和地址 system("pause"); return 0; } 结果如下:
4. 指针与数组
- 直接上代码如下:
#include
//对于赋值给指针,只要获取得到变量的地址,那么就得到了该值 int main() { int a[5]={1,2,3,4,5}; //对于这个数组,a则是首地址(数值1的地址) int *p; for(p=a;*p<=5;p++) //数组赋值给指针,只需将首地址给指针即可(p=a),p++是指针p指向下一个数的地址 { printf("值:%d,地址:%dn",*p,p);//通过指针输出数组a的所有值和地址 } system("pause"); return 0; } 结果如下:
-
指针和数组关系:通俗来说,其实也不难看出,指针可以说是数组,数组也可以说是指针
(1)对于int *p,a[5]={1,2,3,4,5};p=a,现在a是地址且是数组的首地址,首地址的值是a[0],p也是地址,*p是指针p的变量名,可以看出*a等于首地址的值,数组a的首地址赋给了指针p,那么可以推出以下:
- p[0]==a[0],p[0]和a[0]相等,下面结论也是如此
- *p==p[0]
- *p==a[0]
- *p==*a
- *a==a[0]
(2)还有以下:
- p++:指针指向下一个地址(先用后指)
- ++p:也是指针指向下一个地址(先指后用)
- *(p++):相当于*p
- *(++p):输出*p后面的值,p指向下一个地址的值后再输出
5. 总结:
- 函数:是实现各个功能的容器
- 指针:指针的传递是地址,获取地址即可得到对应的值
- 指针获取数组的值,只需将数组的首地址赋给指针,再通过遍历得到其他值



