C语言基础-函数、指针
2017-05-26 23:57
204 查看
本文为关于C语音函数、全局变量、指针的部分知识点,偏向理论部分。
本文为本人学习笔记整理,如有不足,请与本人交流沟通。
C语言的程序模块称为函数, 利用函数可建立模块化程序。
函数是一个独立的具有特定功能的程序模块。
程序的“细化”开发方式使程序更易于管理, 提高程序的可读性。
软件的可重用性。
避免了在程序中使用重复的代码。
一个C程序可由一个主函数和若干个其他函数组成
程序执行时从main函数开始, 根据需要, main函数调用其他函数, 其他函数也可以互相调用。
同一个函数可以被一个或多个函数调用任意多次。最后由main函数结束程序的运行。
不能调用main函数
函数的分类
从用户的观点分为:
C编译系统提供的标准库函数;
用户自定义函数;
从函数间数据传送的关系分为:
有参函数、无参函数;
有返回值函数、无返回值函数。
从函数的调用分为:
内部函数和外部函数。
函数的定义
形式:
函数类型 函数名(参数表) --函数头
{ --花括号中为函数体
数据说明
执行语句
}
函数类型
定义函数时,如果省略函数类型,则默认为int型。
return 的返回值表达式类型,需要跟定义的函数类型一致,假如类型不一致,会强制转换为函数类型,例如return z=1.2 函数类型为int 则最终返回结果为1。
函数的定义:址传递和值传递
定义函数时:变量作为形参(形式参数)为值传递
形参和实参都是变量的话,数据传递是赋值的过程,把实参赋值给形参进行运算,值传递。
定义函数时:数组作为形参为址传递
形参和实参都是数组名的话,是把地址传递过去,形参实参公用一块内存,址传递。
定义函数 int time(char a[ ].charb[ ]) 会退化成int time(char * a,char *b) char*a是指针变量,指针都是地址,属于址传递。
指针变量的大小,都为4个字节sizeof(char *b)=4
为了在被调用函数中处理数组元素的需要, 可另设一个参数传递数组元素的个数。提高函数可容性。
extern 外部变量,也称全局变量
对共用的外部变量可以在任一源文件中定义一次, 其他源文件中用extern对其声明后, 即可使用。
如果希望外部变量仅限于本文件使用, 则在定义外部变量时前面加一个static说明。
在同一源文件内, 对于使用在前, 定义在后的外部变量, 可以在使用前用关键字extern 加以声明(声明时不需值初始化或赋初值)。
由于外部变量先于main函数开辟内存,如果使用在前定义在后的话,需要用eatern先声明该变量为外部变量(即该值使用的是外部变量之前开辟的那块内存),
就可以使用了,满足先定义后使用的原则
在同一个源程序中, 若全局变量与局部变量同名,则在局部变量作用范围内, 全局变量不起作用, 即全局变量被“屏蔽”
内存中供用户使用的空间有三部分:程序区,静态存储区,动态存储区
static 函数类型 函数名(形参)
只能被本文件中的其他函数所调用的函数称为内部函数。
内部函数也称静态函数
内部函数不能被其他文件中的函数使用, 所以在不同文件中可以使用相同名字的内部函数。
static 静态变量
4000
在局部变量前加上关键字static,
称为静态局部变量。
由于所有全局变量都是静态类的,C规定, 在定义全局变量时“static”可以省略。
1.如果全局变量前加static,则代表这个全局变量是这个源文件私有,其他源文件无法使用
2.在局部变量前加上static, 称为静态局部变量。函数调用结束时, 静态局部变量不会消失, 值仍保留, 每次函数调用时, 也不会为其重新分配空间,
它们在整个程序执行期间都不释放。
静态局部变量和全局变量一样, 只赋初值一次, 以后每次函数调用时使用上次函数调用结束时的保留值。
静态局部变量定义时如不赋初值,系统会自动对数值型静态局部变量赋初值0;对字符型赋初值空字符
静态局部变量仅能为本函数使用,其他函数不能使用和影响它们。
extern 函数类型 函数名(形参)
在一个文件内定义的函数, 也可以被其他文件内的函数调用, 这样的的函数称为外部函数。
在C语言中, 函数前如果无关键字extern, 隐含为外部函数。
在调用它的其他文件中, 用extern加函数原型来声明所用的函数是外部函数。
[/b]
指针变量: 就是存放另一变量内存地址(指针)的变量。
指针变量的类型:是指针所指向的变量的类型, 而不是自身的类型。
指针变量的类型与它所指向变量的类型必须一致
例:
int i = 10 定义int型变量i
int x = 0 定义int型变量 x
int *p=NULL 定义int*型(指针)变量p 初值为NULL NULL就0 0也是NULL美 [nʌl]
零值的;
等
于零的;
p=&i 将i的地址,赋予指针变量p 可以直接赋初值 int *p=&i
x=*p 将p所存地址里的值,赋予x
此时x的值为10
“&”取址取地址运算符
“*”取值
取指针变量里保存的地址里的值
野指针
如果使用一个没有确定值的指针变量, 不仅可能破坏你的程序, 而且可能导致系统的破坏。
关于数组指针
Int *p=NULL
int a[10]={1,2,3,4,5,6,7,8,9}
p=a; //这里数组名作为数组的起始地址, 即a[0]的地址。因此 p=a 等效于 p=&a[0]
p=p+1; //如p指向a[0], 则p=p+1之后,p指向a[1]
//如果p=a 等效于 p=&a[0]; 则 p=a+4 等效于 p=&a[4];
在C语言中,对数组元素的访问可用以下三种形式:
下标法: 用a[i]的形式存取数组元素
地址法: 用 *(a+i) 或 *(p+i) 的形式存取数组元素
指针法: 用指针变量指向数组的首地址, 然后通过移动指针*p++存取数组元素。
若访问下标为 i 的元素:
a[i] 等价于 *(a+i) 等价于 *(p+i) 等价于 p[i]
第3种方法是指针移动法, 利用指针变量的自加操作, 使指针顺序指向下一元素,不必每次重新计算地址,因此执行效率高于前两种,且编程方便。
本文为本人学习笔记整理,如有不足,请与本人交流沟通。
函数
函数概述C语言的程序模块称为函数, 利用函数可建立模块化程序。
函数是一个独立的具有特定功能的程序模块。
程序的“细化”开发方式使程序更易于管理, 提高程序的可读性。
软件的可重用性。
避免了在程序中使用重复的代码。
一个C程序可由一个主函数和若干个其他函数组成
程序执行时从main函数开始, 根据需要, main函数调用其他函数, 其他函数也可以互相调用。
同一个函数可以被一个或多个函数调用任意多次。最后由main函数结束程序的运行。
不能调用main函数
函数的分类
从用户的观点分为:
C编译系统提供的标准库函数;
用户自定义函数;
从函数间数据传送的关系分为:
有参函数、无参函数;
有返回值函数、无返回值函数。
从函数的调用分为:
内部函数和外部函数。
函数的定义
形式:
函数类型 函数名(参数表) --函数头
{ --花括号中为函数体
数据说明
执行语句
}
函数类型
定义函数时,如果省略函数类型,则默认为int型。
return 的返回值表达式类型,需要跟定义的函数类型一致,假如类型不一致,会强制转换为函数类型,例如return z=1.2 函数类型为int 则最终返回结果为1。
函数的定义:址传递和值传递
定义函数时:变量作为形参(形式参数)为值传递
形参和实参都是变量的话,数据传递是赋值的过程,把实参赋值给形参进行运算,值传递。
定义函数时:数组作为形参为址传递
形参和实参都是数组名的话,是把地址传递过去,形参实参公用一块内存,址传递。
定义函数 int time(char a[ ].charb[ ]) 会退化成int time(char * a,char *b) char*a是指针变量,指针都是地址,属于址传递。
指针变量的大小,都为4个字节sizeof(char *b)=4
为了在被调用函数中处理数组元素的需要, 可另设一个参数传递数组元素的个数。提高函数可容性。
extern 外部变量,也称全局变量
对共用的外部变量可以在任一源文件中定义一次, 其他源文件中用extern对其声明后, 即可使用。
如果希望外部变量仅限于本文件使用, 则在定义外部变量时前面加一个static说明。
在同一源文件内, 对于使用在前, 定义在后的外部变量, 可以在使用前用关键字extern 加以声明(声明时不需值初始化或赋初值)。
由于外部变量先于main函数开辟内存,如果使用在前定义在后的话,需要用eatern先声明该变量为外部变量(即该值使用的是外部变量之前开辟的那块内存),
就可以使用了,满足先定义后使用的原则
在同一个源程序中, 若全局变量与局部变量同名,则在局部变量作用范围内, 全局变量不起作用, 即全局变量被“屏蔽”
内存中供用户使用的空间有三部分:程序区,静态存储区,动态存储区
static 函数类型 函数名(形参)
只能被本文件中的其他函数所调用的函数称为内部函数。
内部函数也称静态函数
内部函数不能被其他文件中的函数使用, 所以在不同文件中可以使用相同名字的内部函数。
static 静态变量
4000
在局部变量前加上关键字static,
称为静态局部变量。
由于所有全局变量都是静态类的,C规定, 在定义全局变量时“static”可以省略。
1.如果全局变量前加static,则代表这个全局变量是这个源文件私有,其他源文件无法使用
2.在局部变量前加上static, 称为静态局部变量。函数调用结束时, 静态局部变量不会消失, 值仍保留, 每次函数调用时, 也不会为其重新分配空间,
它们在整个程序执行期间都不释放。
静态局部变量和全局变量一样, 只赋初值一次, 以后每次函数调用时使用上次函数调用结束时的保留值。
静态局部变量定义时如不赋初值,系统会自动对数值型静态局部变量赋初值0;对字符型赋初值空字符
静态局部变量仅能为本函数使用,其他函数不能使用和影响它们。
extern 函数类型 函数名(形参)
在一个文件内定义的函数, 也可以被其他文件内的函数调用, 这样的的函数称为外部函数。
在C语言中, 函数前如果无关键字extern, 隐含为外部函数。
在调用它的其他文件中, 用extern加函数原型来声明所用的函数是外部函数。
指针
[b]指针: 就是变量的内存地址[/b]
指针变量: 就是存放另一变量内存地址(指针)的变量。
指针变量的类型:是指针所指向的变量的类型, 而不是自身的类型。
指针变量的类型与它所指向变量的类型必须一致
例:
int i = 10 定义int型变量i
int x = 0 定义int型变量 x
int *p=NULL 定义int*型(指针)变量p 初值为NULL NULL就0 0也是NULL美 [nʌl]
零值的;
等
于零的;
p=&i 将i的地址,赋予指针变量p 可以直接赋初值 int *p=&i
x=*p 将p所存地址里的值,赋予x
此时x的值为10
“&”取址取地址运算符
“*”取值
取指针变量里保存的地址里的值
野指针
如果使用一个没有确定值的指针变量, 不仅可能破坏你的程序, 而且可能导致系统的破坏。
关于数组指针
Int *p=NULL
int a[10]={1,2,3,4,5,6,7,8,9}
p=a; //这里数组名作为数组的起始地址, 即a[0]的地址。因此 p=a 等效于 p=&a[0]
p=p+1; //如p指向a[0], 则p=p+1之后,p指向a[1]
//如果p=a 等效于 p=&a[0]; 则 p=a+4 等效于 p=&a[4];
在C语言中,对数组元素的访问可用以下三种形式:
下标法: 用a[i]的形式存取数组元素
地址法: 用 *(a+i) 或 *(p+i) 的形式存取数组元素
指针法: 用指针变量指向数组的首地址, 然后通过移动指针*p++存取数组元素。
若访问下标为 i 的元素:
a[i] 等价于 *(a+i) 等价于 *(p+i) 等价于 p[i]
第3种方法是指针移动法, 利用指针变量的自加操作, 使指针顺序指向下一元素,不必每次重新计算地址,因此执行效率高于前两种,且编程方便。
相关文章推荐
- C语言基础学习6: 指向函数的指针
- C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- C语言基础及指针③函数与二级指针
- C语言基础学习7:返回指针值的函数
- 【C语言基础一百题10】71-86题指针和函数
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- 20151215C语言基础16_函数3(数组与指针)
- C语言基础-指针和函数的补充21
- C语言基础:C语言指针(7) - 指向函数的指针
- 20151215C语言基础16_函数3(数组与指针)
- C语言基础知识之(十五):指针和函数
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- C语言基础 函数指针
- 黑马程序员——c语言基础:指针函数和函数指针
- 20151215C语言基础16_函数3(数组与指针)
- 20151215C语言基础16_函数3(数组与指针)
- C语言基础与提高4——指针函数,函数指针
- 20151215C语言基础16_函数3(数组与指针)
- 20151215C语言基础16_函数3(数组与指针)