黑马程序员-IOS开发之--C语言基础-复杂数据类型等

时间:2022-12-17 00:25:34

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


1.typedef关键字

typedef是用来声明类型名的,在实际编写代码的过程中使用typedef往往是为了增加代码的可读性,

它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原来类型相同的效果。

如:

typedef int INT;
typedef char CHAR;

注意点:

(1)typedef是为一个数据类型起了一个新的别名,如type int INT,

这点与#define是截然不同的,#define只是做一个简单的字符串替换。


(2)对于宏定义

#define INT int
unsigned INT a;

  这种用法是可行的;

typedef int INT;
unsigned INT a;

是绝对错误的用法。

2.#define

 #define是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行简单的字符串替换。在使用宏定义时,如果稍不注意就会发生错误。如:

#define ADD(a,b) a+b

int i=1;
int j=2;
int k=3;
int s=ADD(i,j)*k;

你可能想求的是(i+j)*k的结果,然而这段程序并没有达到这种效果,由于宏替换只是进行简单的字符串替换,那么ADD(i,j)*k相当于i+j*k,并不是想象中的(i+j)*k。

3.c语言中static关键字

在c语言中,static关键字用来修饰局部变量,全局变量,函数,在不同的情况下,static的含义也不同。

(1)修饰局部变量
一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。

在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。
例如:

#include <stdio.h>

void fun(){
static int a=1;
a++;
printf("%d\n",a);
}

int main(){
fun();
printf("888\n");
fun();
system("pause");
}

(2)修饰全局变量

对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。


(3)修饰函数

用static修饰函数,情况与修饰全局变量大致相同,就是改变了函数的作用域


4.extern关键字

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

(1)extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

(2)如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:
  extern int f(); 和int f();


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://www.itheima.com" target="blank"> www.itheima.com </a>