OC学习2——C语言特性之函数

1、OC是在C语言的基础上进行扩展的,在OC中直接用C语言进行coding也是可以通过编译的。因此,函数定义的语法格式如下:

函数返回值类型  函数名(形参列表)
{
   //由零条或多条可执行性语句组成的函数提
}

2、函数的传递机制:值传递、地址传递。

值传递:将实际的参数值的副本(复制品)传入函数内,参数本身不受函数内对其副本的改变的影响。

地址传递:将实际参数的地址的副本传入函数,函数中对地址对应位置的值进行改变会影响到实际参数的值。

3、内部函数和外部函数:

内部函数:定义函数时用static修饰,该函数只能被当前源文件中的其他函数进行调用,这种函数称为内部函数。内部函数具有更好的内聚性,它可以保证该函数只能在该源文件中被调用,从而可以避免多个源文件中重名函数的冲突问题。

外部函数:定义函数时使用extern修饰,或者不使用任何修饰符修饰,它可以被任何文件中的函数调用,这种函数称为外部函数。一般用于库函数的定义中。

4、局部变量与全局变量:

局部变量:分为函数局部变量和代码块局部变量。C语言并不强制对局部变量赋初始值,在程序员对局部变量赋初始值之前,局部变量的值是不确定的,这是因为每次调用函数的时候都会为该变量重新分配内存,而重新分配的内存中的值是不确定的。

全局变量:也称为外部变量,该源文件中的所有函数都可以使用全局变量。如果局部变量和全局变量同名,则局部变量会覆盖全局变量。全局变量又分为外部全局变量(所有源文件的函数都可以访问的变量,用extern关键字声明或者不声明)和内部全局变量(当前源文件中的所有函数都可以访问的变量,用static关键字声明)。

5、C语言程序运行的内存大致可以分为三个部分:程序区、静态存储区、动态存储区。

静态存储区:静态存储区的变量在程序运行开始时分配内存,直到程序结束才会释放内存,在程序运行过程中,静态存储区的变量总是占据固定的内存,静态存储区总是存放两类变量:全局变量、static修饰的局部变量。

动态存储区:动态存储区的变量所在的存储空间是动态分配的,当程序多次调用同一个函数时,该函数的局部变量(非static修饰的变量)每次都会动态分配内存空间,每次函数结束都会自动释放这些内存空间,这种分配和释放都是动态的。动态存储区主要存放三类数据:函数的形参、非static局部变量、函数执行的现场数据以及返回地址等。

6、C语言中变量的存储类别:

auto:自动存储几只,局部变量默认采取这种存储机制

static:指定将局部变量存放在静态存储区,这样该变量所占的空间爱你的一直保存直到程序退出。

register:指定将该变量存放到寄存器中。

extern:定义外部局部变量。

 1 #import <Foundation/Foundation.h>
 2
 3 //了解auto和static的区别
 4 void fac(int n)
 5 {
 6     auto int a = 1 ;
 7     static int b = 1 ;
 8     a+= n ;
 9     b+= n ;
10     printf("a = %d, b = %d",a, b) ;
11 }
12
13 int main(int argc, char * argv[])
14 {
15     //才用循环调用三次
16     for(int i = 0 ; i < 3 ; i++)
17     {
18         fac(i) ;
19     }
20 }
21
22 /*  输出结果为
23    a = 1, b = 1
24    a = 2, b = 2
25    a = 3, b = 4
26 */  

7、预处理是C、OC的特殊命令。在编译器对程序进行编译之前,编译器会对这些预处理进行处理,然后将这些预处理的结果与源程序一起进行编译。

预处理的两个特征:1、预处理命令都必须以#开头;2、预处理通常都位于程序开头部分。

 1 //使用#define执行宏定义,#undef取消宏定义
 2 #define YES 1
 3 #define PI 3.1415926
 4
 5 #undef YES
 6
 7 //带参宏定义
 8 #define AREA(r) PI*r*r
 9
10 // C语言使用#include导入其他源程序
11 // OC语言使用#import导入其他源程序
12
13 //使用#ifdef、#ifndef、#else、#endif执行条件编译
14 #ifdef 宏名称
15     //语句
16 #else
17     //语句
18 #endif
19
20 //使用#if、#elif、#else、#endif 执行条件编译
21 #if 表达式
22     //语句
23 #elif 表达式
24     //语句
25     //可以有多个#elif语句
26 #else
27     //语句
28 #endif
时间: 2024-10-23 13:26:10

OC学习2——C语言特性之函数的相关文章

【C语言学习】C语言中的函数

代码中,函数是为了更好的实现模块化的程序设计.那么函数的本质是什么?函数中定义的变量(全局变量.局部变量.静态变量等)又是怎样存储的?为什么全局变量与局部变量的作用域和生命期不相同?只有更加深入的了解函数,才能解答这些问题! ★函数的本质 函数的本质是一段可执行的机器指令代码,函数名的本质是一个标号,表示函数代码的入口.该标号的值等于内存中存储函数代码的内存空间的首地址. ★变量 ●全局变量 全局变量也就是外部变量,定义在函数的外部.因此它不属于任何一个函数,只属于所在的源文件. ▲初始化 对于

OC学习将C语言字符串转换为OC字符串

将C语言字符串转换为OC字符串 1 /** 2 * inputNSString:自定义函数 3 */ 4 #import <Foundation/Foundation.h> 5 /** 6 * 将C语言字符串转换为OC语言字符串 7 * @return OC语言字符串 8 */ 9 NSString *inputNSString(){ 10 char arr[256];//假定数组长度为256 11 char ch; 12 int length=0; 13 //while ((ch=getch

12-黑马程序员------C 语言学习笔记--- C语言指针与函数

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 六 指针与函数 01 指针作为函数参数 指针作为实参时,与普通变量一样,也是采用单向的值传递方式,即将指针变量的值(该值是一个地址)传递给被调函数的形参(必须也是一个指针变量).由于形参接受实参传递的值是一个地址,这样两者就指向

【转】浅思OC的语言特性

算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).整体来说,确实是一门不错的编程语言. 现在,让我来想想OC的动态语言特性.OC的动态特性表现为了三个方面:动态类型.动态绑定.动态加载.之所以叫做动态,是因为必须到运行时(run time)才会做一些事情. (1)动态类型 动态

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

13个非常实用的语言特性,助力更好的Python学习!

如果你是一个在学Python,或者打算学习Python老铁,看完这些语言特性,你会觉得很有受益且实用! 1.分拆 当你要传递的参数已经是一个列表,调用的函数却接受分开一个个的参数,这个时候可以考虑参数列表拆分: 2.交换变量分拆 3.负索引 非常直观,以元素1为第0个元素,最后一个元素即为a[-1],有点循环链表的意思. 4.列表切片 (a[start:end]) 5.使用负索引的列表切片 6.带步进值的列表切片 (a[start:end:step]) 7.负步进值得列表切片 8.列表切片赋值

Java基础学习(一)——语言特性及开发环境搭建

学习了一段时间的Java,想通过几篇文章做一下这一段时间的学习总结.由于有c/c++的一些基础,总的来说Java语言还是挺具有亲和感的.虽然经常到博客园找资料,但是也一直没有自己动手写过博客,现在练练手,也为日后有个回忆吧. 一,Java简介 1.语言起源 语言起源:Java是SUN ( Stanford University Network 斯坦福大学网络公司 ) 1995年推出的一门高级编程语言.Java名称的来源Java最初被命名为Oak,目标在于家用电器等小型系统的编程语言,随着市场的变

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

特殊用途语言特性:默认实参,内联函数和constexpr函数,调试帮助

重点: 1.三种函数相关的语言特性:默认实参,内联函数和constexpr函数. 2.默认实参:某些函数有一种形参,在函数的很多次调用中它们都被赋予一个相同的值. 3.一旦某个形参被赋予了默认值之后,它后面的所以形参都必须要默认值. 4.若想使用默认形参,只要在调用函数时省略该实参即可. Tip:Window = screen ( , , ‘?’ );//错误:只能省略尾部的实参! 5.对于函数的声明来说,习惯将其放在头文件当中,在给定的作用域中一个形参只能赋予一次默认实参. NOTE:通常,应