主要内容
- 指针
- 函数指针
- 全局变量和函数返回值
指针
- 什么是指针?
- 指针就是变量的地址
&取地址操作符
&myVar;
如何声明指针变量
int *mypointer; 或者 int* myPointer;(不推荐) int表示指针内存放的数据类型,*表示声明的是指针,myPointer指针变量的名字
如何使用指针
int *myPointer; int myVar; myPointer = &myVar; *myPointer = 27; myVar的值是多少呢?为什么? 因为指针变量myPointer的地址指向myVar的存放地址,所以当给myPointer地址内存放27时, myVar的存放地址内的值也是27,即myVar = 27.
函数参数
什么是函数参数
- 函数的参数是用于在函数调用的地方与被调用函数之间共享变量。比如说
我们要实现一个加法功能的函数addTwos(),addTwos()使用两个数值,然后将数值相加,返回它们的和。但问题是 1,函数如何获取原始的两个数据的值? 2,函数调用繁荣地方如何得到addTwos()计算的和? 答案就是使用函数参数!
- 函数的参数是用于在函数调用的地方与被调用函数之间共享变量。比如说
变量的作用域
在C语言中每一个变量都有作用域。当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问,这个区域就是变量的作用域。总体来说,在C语言中编译器可以确认4种不同类型的作用域:
- 文件作用域
- 函数作用域
- 代码块作用域
- 原型作用域
函数作用域
- 函数作用域指的是:变量在函数中声明,那么此变量是
这个函数的局部变量,只能在这个函数内被访问和使用。换 句话说,你不能在一个函数中声明一个变量,然后在另外一 个函数中来引用。例如:
ERROR: #include <stdio.h> int main (int argc, const char * argv[]) { int numDots; numDots = 500; DrawDots(); return 0; } void DrawDots( void ) { int i; for ( i = 1; i <= numDots; i++ ) printf( "." ); }
- 函数作用域指的是:变量在函数中声明,那么此变量是
函数参数如何工作
函数参数与变量类似,所不一样的是函数的参数在参数列表里声明,即:函数声明中两个圆括号之 间。例如:
#include <stdio.h> void DrawDots( int numDots ); //numDots函数参数 int main (int argc, const char * argv[]) { DrawDots( 30 ); return 0; } void DrawDots( int numDots ) { int i; for ( i = 1; i <= numDots; i++ ) printf( "." ); } 函数参数都是临时参数,当函数调用的时候,临时变量被创建,当函数退出后,变量销毁。
行参和实参
传给函数的实际值叫做实参;函数定义中参数列表用于接收实参的参数叫做形参。 void DrawDots( int numDots ); //numDots是形参 DrawDots( 30 ); //30是实参
指针在函数中的作用
#include <stdio.h> void ChangeVarValue( int numDots ); int main (int argc, const char * argv[]) { int numDots; numDots = 30; ChangeVarValue( numDots ); printf( "in main numDots’s value: %d\n”,numDots ); return 0; } void ChangeVarValue( int numDots ) { numDots = 40; printf( "numDots’s value is %d\n”,numDots ); }
#include <stdio.h> void ChangeVarValue( int *numDots ); int main (int argc, const char * argv[]) { int numDots; numDots = 30; ChangeVarValue( &numDots ); printf( “in main numDots’s value: %d\n”,numDots ); return 0; } void ChangeVarValue( int *numDots ) { *numDots = 40; printf( “numDots’s value is %d\n”,*numDots ); }
全局变量和函数返回值
- 全局变量和函数返回值是另外两种在不同的函数中共享数据的机制
全局变量顾名思义是指在整个源文件内,所有函数都可以访问,修改的变量
#include <stdio.h> void ChangeVarValue( int *numDots ); int main (int argc, const char * argv[]) { int numDots; numDots = 30; ChangeVarValue( &numDots ); printf( “in main numDots’s value: %d\n”,numDots ); return 0; } void ChangeVarValue( int *numDots ) { *numDots = 40; printf( “numDots’s value is %d\n”,*numDots ); }
#include <stdio.h> void PassAlong( void ); void PrintMyVar( void ); int gMyVar;//全局变量的声明方法注意变量前的g int main (int argc, const char * argv[]) { gMyVar = 10; PassAlong(); return 0; } void PassAlong( void ) { PrintMyVar(); } void PrintMyVar( void ) { printf( "gMyVar = %d", gMyVar ); }
函数返回值
通过函数返回值实现不同函数之间的数据共享。 #include <stdio.h> int AddTheseNumbers( int num1, int num2 ); int main (int argc, const char * argv[]) { int sum; sum = AddTheseNumbers( 5, 6 ); printf( "The sum is %d.", sum ); return 0; } int AddTheseNumbers( int num1, int num2 ) { return ( num1 + num2 ); } 对于函数返回值为空的函数,可以使用return退出函数