ios笔记--C语言基础笔记
2014-06-15 19:01
239 查看
1.#include“a.txt”:即a.txt中的内容加载到程序中。
include用法:如果导入的是系统自带的则用<>;
如果导入的是自己写的文件则用“”;
2. stadio.h称为头文件,用来声明一些常用的函数。如输入,输出函数。
3. C语言的函数入口为main()函数,C不允许重复定义函数,否则报错。
4.(1)形参:在方法后面的()中定义的变量称为形式参数;
如void test(int b){printf("我被调用%d次了。"+b);} b既是形参。
(2)实参:在调用函数时传入的值称为实际参数;
如void main(){ printf("调用test函数:"+test(1));}
5.常用的基本类型:
6.类型修饰符:
short 短型 取值范围(-32768 ---32767)
long 长型 取值范围(-2147483648 ---2147483647)
signed 有符号型(有正数和负数) 取值范围(-32768 ---32767)
unsigned 无符号型(只有正数和零) 取值范围(0 ---65535)
7.关系运算符:
< 小于运算符
<= 小于等于运算符
> 大于等于运算符
>= 大于等于运算符
== 等于运算符
!= 不等于运算符
注意点:在Java中,关系运算结果如果为真就返回true;为假就返回false;
如:boolean b = 1>2 //返回false
而在C语言中,关系运算结果如果为真就返回1,为假就返回0;
如:int b =1>2 //返回0
8.逗号表达式:用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式:表达式1,表达式2,...,表达式n;
运算过程是:从左往右的顺序。
逗号表达式也有返回值,整个逗号表达式的值是最后一个表达式的值。
如:int a =1;
int b=2;
int c;
c = (a+=2,b+=a);
printf("c=%d",c);
9.二位数组注意点:二维数组可以省略行数,但不可以省略列数。
10.字符串:
‘\0’:表示字符串结束标志。它是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。
如:存储一个字符串“book”,char a[] ="book";它应该是占用5个字符,因为“\0”也算一个。
char b[3] ={'a','b','\0'} //表示字符串
char b[2] ={'a','b'} //表示字符数组
char b[] ="ab"; //会在字符串尾部自动加上一个 \0 结束。
输出字符串函数有:
(1)printf:可以输出多个字符串。 如:printf("%s %s %s %s.\n","my","name","is","Jack");
(2)puts:只能输出一个字符串,而且会自动换行。直到读取到'\0'才结束。
如:char s1[] ={'a','b','\0'}; char s2[] ={'e','f'} puts(s2);//输出结果为efab
输入字符串函数有:
(1)scanf();可以一次性输入多个字符串。不能用来读取空格,tab。从首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标志\0。
(2)gets();一次只能读取一个字符串,可以读入包含空格、tab的字符串,直到遇到回车为止
这个函数不支持使用,因为会造成内存溢出问题。
如:char s1[] ="ab";
char s2[2];
gets(s2);//键盘输入itcast
printf("%s",s1);//输出结果为cast
原因:因为s2在内存中占2个字符,内容为it,剩下的为cast,所以输出结果为cast
常用的函数有:
(1)strlen():用来测量字符串的字符个数。不包括\0。如:int size = strlen("abcdef");
(2)strcpy(字符串1,字符串2):复制字符串函数。
(3)strcat(字符串1,字符串2):字符串连接函数。原理是把第二个字符放到掉第一个字符的结尾\0,如果有多个\0结束符,默认从第一个\0结束符开始连接。
如:char a[]={'b','o','\0','o','k','\0'};
char b[] ="tick";
strcpy(a,b);
printf("%s",a); //输出结果为:botick
(4)strcmp(字符串1,字符串2):字符串比较函数。原理是两个字符串从左往右逐个字符比较,直到字符不相同或者遇见‘\0’为止。如果全部相同则返回0,大于则返回正,小于则返回负。
(5)strlwr():将字符串中大写字母转换成小写字母。
(6)strupr():将字符串中小写字母转换成大写字母。
11.字符:
(1)字符输出函数putchar:一次只能输出一个字符。如putchar(65);输出A
(2)字符输入函数getchar:一次只能输入一个字符。可以读取空格、tab,直到遇到回车为止。
12.指针:
一、概念。
直接引用:直接通过变量名引用的叫直接引用。
间接引用:通过另一个变量来引用的叫间接引用。
指针变量:用来存放变量地址的变量就叫指针变量。
char a;
char *b;//定义了一个指针变量b
b=&a; //表示把a的地址赋给b
*b =10; //表示b中对应的存储空间的值为10。也相当于a= 10
一个指针变量所占的内存空间是固定的。它不会因为指向的类型不同而在内存中所占的空间大小也不同。但在不同的编译器下所占的内存空间是不一样的。
16位编译器 32位编译器 64位编译器
指针变量 2字节 4字节 8字节
二、指针与字符串:
char a[] = "abc";//定义的是一个字符串变量,a[0] ='b'这样子也是可以改的。
char *p = "abc"; //定义的是一个字符串常量!严格来说,应该写成const char *p ="abc"; 但是*p ='b';这样子是不能修改的,因为*p指向的是字符串常量,所以不能修改。
三、指针与函数:
函数:函数在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。
例子:被调用函数为int sum(int a, int b){ int c = a+b;return c; }
void main(){
int (*p)(int,int);//定义了一个指向函数的指针变量p,返回值类型为int类型,接收两个int类型的参数
p = sum; //把函数sum的地址赋给指针p
(*p)(3,4);//调用函数sum
}
函数利用指针的好处:可以把函数当做参数进行传递。
13.预处理指令:
1.概念:C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如#include文件包含的指令),产生一个新的源程序,这个过程称为编译预处理。
2.C语言提供的预处理指令主要有:宏定义、文件包含、条件编译。
(1)宏定义:即字符替换。可以定义变量,也可以定义表达式。如:#define Num 6 #define sum(a,b) a+b
(2)条件编译:只希望程序的其中一部分代码在满足一定的条件时才进行编译,否则不参与编译,这就是条件编译。
常用用法:用来判断宏的值。
格式:#if 条件{}
#elif 条件{}
#else {}
#endif
其他用法:
#if defined()和#if!defined()的用法:用来判断是否定义过某个宏。
#ifndef的使用和#if defined()的用法基本一致。
#ifndef的使用和#if !defined()的用法基本一致。
(3)文件包含:即#include指令,它可以将一个文件的全部内容拷贝到另一个文件中。
常见的形式有:1.#include<文件名>:这种形式一般指导入C语言的库函数。
2.#include"文件名":这种形式一般指导入用户自定义的文件。程序一般会在源程序的当前目录下寻找 ,若找不到,再到操作系统的path路径中查找,最后才到C语言库函数头文件所在目录中查找。
注意点:#include指令允许嵌套包含,但不允许递归包含。
14.变量:根据变量的作用域不同,可分为局部变量和全局变量。
局部变量:在函数内部定义的变量称为局部变量。
全局变量:在所有函数外部定义的变量称为全局变量。作用域是从定义变量的位置开始到源程序结束。
变量的存储类型:指变量存储在什么地方,一般有3个地方可以存储变量:普通内存、运行时堆栈、硬件寄存器。变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久。
根据存储类型的不同,可分为:
(1)自动变量:被关键字auto修饰的局部变量都是自动变量。一般auto都是省略的,所以所有的局部变量在默认情况下都是自动变量。自动变量是存储在运行时堆栈中的。
生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。
(2)静态变量:存储在静态内存中,也就是不属于堆栈的变量。如:全局变量和被static修饰的局部变量。
生命周期:静态变量在重新运行之前创建,在程序的整个运行期间始终存在,直到程序结束。
(3)寄存器变量:存储在硬件寄存器中的变量称为寄存器变量。(默认情况下,自动变量和静态变量都是放在内存中的。
被关键字register修饰的自动变量都是寄存器变量。
只有自动变量才可以是寄存器变量。
只限于int、char和指针类型变量使用。
生命周期:在调用该函数时占用寄存器中存放的值,当函数结束后释放寄存器,变量消失。
15.函数:
(1)外部函数:在当前文件定义的函数允许被其他文件访问、调用的,就称为外部函数。
完整地定义一个外部函数需要extern关键字。extern也可以省略。
(2)内部函数:在当前文件定义的函数不允许被其他文件访问、调用,只能在内部使用的,就称为内部函数。常用static关键字修饰。
扩展:同理也有用extern修饰的变量叫外部变量和用static修饰的变量叫内部变量。
16.结构体:
定义一个结构的一般形式为:
struct 结构名
{
成员表列
}
成员表由若干个成员组成,每个成员都是该结构的一个组成部分。
结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。
说明结构变量有以下三种方法。
(1).先定义结构,再说明结构变量。 如:
struct student
{
int num;
char *name;
int age;
};
struct student stu1,stu2;
说明了两个变量stu1和stu2为student结构类型。
(2)在定义结构类型的同时说明结构变量。例如:
struct student
{
int num;
char *name;
int age;
} stu1,stu2;
注意
当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。
使用结构变量成员的一般形式是:
结构变量名.成员名 如:stu1.age表示取得学生的年龄这个属性。
17.枚举:当一个变量有几个固定取值时,可以将这个变量定义为枚举类型。
一般形式:enum 枚举名{枚举元素1,枚举元素2,...};
如:enum season {spring,summer,autumn,winter};
C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。枚举元素的值取决于定义时各枚举元素排列的先后顺序。
18.typeof关键字:给各种数据类型定义一个新名字(别名)。可以是基本类型,也可以是结构体,枚举。
如:typedef int Integer;
使用的时候就可以这样写了: Integer b =9;
include用法:如果导入的是系统自带的则用<>;
如果导入的是自己写的文件则用“”;
2. stadio.h称为头文件,用来声明一些常用的函数。如输入,输出函数。
3. C语言的函数入口为main()函数,C不允许重复定义函数,否则报错。
4.(1)形参:在方法后面的()中定义的变量称为形式参数;
如void test(int b){printf("我被调用%d次了。"+b);} b既是形参。
(2)实参:在调用函数时传入的值称为实际参数;
如void main(){ printf("调用test函数:"+test(1));}
5.常用的基本类型:
类型 | 名称 | 存储空间(16位编译器) | 存储空间(32位编译器) | 存储空间(64位编译器) |
short | 短整型 | 2个字节 | 2个字节 | 2个字节 |
int | 整型 | 2个字节 | 4个字节 | 4个字节 |
long | 长整型 | 4个字节 | 4个字节 | 8个字节 |
float | 单精度浮点型 | 4个字节 | 4个字节 | 4个字节 |
double | 双精度浮点型 | 8个字节 | 8个字节 | 8个字节 |
char | 字符型 | 1个字节 | 1个字节 | 1个字节 |
short 短型 取值范围(-32768 ---32767)
long 长型 取值范围(-2147483648 ---2147483647)
signed 有符号型(有正数和负数) 取值范围(-32768 ---32767)
unsigned 无符号型(只有正数和零) 取值范围(0 ---65535)
7.关系运算符:
< 小于运算符
<= 小于等于运算符
> 大于等于运算符
>= 大于等于运算符
== 等于运算符
!= 不等于运算符
注意点:在Java中,关系运算结果如果为真就返回true;为假就返回false;
如:boolean b = 1>2 //返回false
而在C语言中,关系运算结果如果为真就返回1,为假就返回0;
如:int b =1>2 //返回0
8.逗号表达式:用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式:表达式1,表达式2,...,表达式n;
运算过程是:从左往右的顺序。
逗号表达式也有返回值,整个逗号表达式的值是最后一个表达式的值。
如:int a =1;
int b=2;
int c;
c = (a+=2,b+=a);
printf("c=%d",c);
9.二位数组注意点:二维数组可以省略行数,但不可以省略列数。
10.字符串:
‘\0’:表示字符串结束标志。它是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。
如:存储一个字符串“book”,char a[] ="book";它应该是占用5个字符,因为“\0”也算一个。
char b[3] ={'a','b','\0'} //表示字符串
char b[2] ={'a','b'} //表示字符数组
char b[] ="ab"; //会在字符串尾部自动加上一个 \0 结束。
输出字符串函数有:
(1)printf:可以输出多个字符串。 如:printf("%s %s %s %s.\n","my","name","is","Jack");
(2)puts:只能输出一个字符串,而且会自动换行。直到读取到'\0'才结束。
如:char s1[] ={'a','b','\0'}; char s2[] ={'e','f'} puts(s2);//输出结果为efab
输入字符串函数有:
(1)scanf();可以一次性输入多个字符串。不能用来读取空格,tab。从首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标志\0。
(2)gets();一次只能读取一个字符串,可以读入包含空格、tab的字符串,直到遇到回车为止
这个函数不支持使用,因为会造成内存溢出问题。
如:char s1[] ="ab";
char s2[2];
gets(s2);//键盘输入itcast
printf("%s",s1);//输出结果为cast
原因:因为s2在内存中占2个字符,内容为it,剩下的为cast,所以输出结果为cast
常用的函数有:
(1)strlen():用来测量字符串的字符个数。不包括\0。如:int size = strlen("abcdef");
(2)strcpy(字符串1,字符串2):复制字符串函数。
(3)strcat(字符串1,字符串2):字符串连接函数。原理是把第二个字符放到掉第一个字符的结尾\0,如果有多个\0结束符,默认从第一个\0结束符开始连接。
如:char a[]={'b','o','\0','o','k','\0'};
char b[] ="tick";
strcpy(a,b);
printf("%s",a); //输出结果为:botick
(4)strcmp(字符串1,字符串2):字符串比较函数。原理是两个字符串从左往右逐个字符比较,直到字符不相同或者遇见‘\0’为止。如果全部相同则返回0,大于则返回正,小于则返回负。
(5)strlwr():将字符串中大写字母转换成小写字母。
(6)strupr():将字符串中小写字母转换成大写字母。
11.字符:
(1)字符输出函数putchar:一次只能输出一个字符。如putchar(65);输出A
(2)字符输入函数getchar:一次只能输入一个字符。可以读取空格、tab,直到遇到回车为止。
12.指针:
一、概念。
直接引用:直接通过变量名引用的叫直接引用。
间接引用:通过另一个变量来引用的叫间接引用。
指针变量:用来存放变量地址的变量就叫指针变量。
char a;
char *b;//定义了一个指针变量b
b=&a; //表示把a的地址赋给b
*b =10; //表示b中对应的存储空间的值为10。也相当于a= 10
一个指针变量所占的内存空间是固定的。它不会因为指向的类型不同而在内存中所占的空间大小也不同。但在不同的编译器下所占的内存空间是不一样的。
16位编译器 32位编译器 64位编译器
指针变量 2字节 4字节 8字节
二、指针与字符串:
char a[] = "abc";//定义的是一个字符串变量,a[0] ='b'这样子也是可以改的。
char *p = "abc"; //定义的是一个字符串常量!严格来说,应该写成const char *p ="abc"; 但是*p ='b';这样子是不能修改的,因为*p指向的是字符串常量,所以不能修改。
三、指针与函数:
函数:函数在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。
例子:被调用函数为int sum(int a, int b){ int c = a+b;return c; }
void main(){
int (*p)(int,int);//定义了一个指向函数的指针变量p,返回值类型为int类型,接收两个int类型的参数
p = sum; //把函数sum的地址赋给指针p
(*p)(3,4);//调用函数sum
}
函数利用指针的好处:可以把函数当做参数进行传递。
13.预处理指令:
1.概念:C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如#include文件包含的指令),产生一个新的源程序,这个过程称为编译预处理。
2.C语言提供的预处理指令主要有:宏定义、文件包含、条件编译。
(1)宏定义:即字符替换。可以定义变量,也可以定义表达式。如:#define Num 6 #define sum(a,b) a+b
(2)条件编译:只希望程序的其中一部分代码在满足一定的条件时才进行编译,否则不参与编译,这就是条件编译。
常用用法:用来判断宏的值。
格式:#if 条件{}
#elif 条件{}
#else {}
#endif
其他用法:
#if defined()和#if!defined()的用法:用来判断是否定义过某个宏。
#ifndef的使用和#if defined()的用法基本一致。
#ifndef的使用和#if !defined()的用法基本一致。
(3)文件包含:即#include指令,它可以将一个文件的全部内容拷贝到另一个文件中。
常见的形式有:1.#include<文件名>:这种形式一般指导入C语言的库函数。
2.#include"文件名":这种形式一般指导入用户自定义的文件。程序一般会在源程序的当前目录下寻找 ,若找不到,再到操作系统的path路径中查找,最后才到C语言库函数头文件所在目录中查找。
注意点:#include指令允许嵌套包含,但不允许递归包含。
14.变量:根据变量的作用域不同,可分为局部变量和全局变量。
局部变量:在函数内部定义的变量称为局部变量。
全局变量:在所有函数外部定义的变量称为全局变量。作用域是从定义变量的位置开始到源程序结束。
变量的存储类型:指变量存储在什么地方,一般有3个地方可以存储变量:普通内存、运行时堆栈、硬件寄存器。变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久。
根据存储类型的不同,可分为:
(1)自动变量:被关键字auto修饰的局部变量都是自动变量。一般auto都是省略的,所以所有的局部变量在默认情况下都是自动变量。自动变量是存储在运行时堆栈中的。
生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。
(2)静态变量:存储在静态内存中,也就是不属于堆栈的变量。如:全局变量和被static修饰的局部变量。
生命周期:静态变量在重新运行之前创建,在程序的整个运行期间始终存在,直到程序结束。
(3)寄存器变量:存储在硬件寄存器中的变量称为寄存器变量。(默认情况下,自动变量和静态变量都是放在内存中的。
被关键字register修饰的自动变量都是寄存器变量。
只有自动变量才可以是寄存器变量。
只限于int、char和指针类型变量使用。
生命周期:在调用该函数时占用寄存器中存放的值,当函数结束后释放寄存器,变量消失。
15.函数:
(1)外部函数:在当前文件定义的函数允许被其他文件访问、调用的,就称为外部函数。
完整地定义一个外部函数需要extern关键字。extern也可以省略。
(2)内部函数:在当前文件定义的函数不允许被其他文件访问、调用,只能在内部使用的,就称为内部函数。常用static关键字修饰。
扩展:同理也有用extern修饰的变量叫外部变量和用static修饰的变量叫内部变量。
16.结构体:
定义一个结构的一般形式为:
struct 结构名
{
成员表列
}
成员表由若干个成员组成,每个成员都是该结构的一个组成部分。
结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。
说明结构变量有以下三种方法。
(1).先定义结构,再说明结构变量。 如:
struct student
{
int num;
char *name;
int age;
};
struct student stu1,stu2;
说明了两个变量stu1和stu2为student结构类型。
(2)在定义结构类型的同时说明结构变量。例如:
struct student
{
int num;
char *name;
int age;
} stu1,stu2;
注意
当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。
使用结构变量成员的一般形式是:
结构变量名.成员名 如:stu1.age表示取得学生的年龄这个属性。
17.枚举:当一个变量有几个固定取值时,可以将这个变量定义为枚举类型。
一般形式:enum 枚举名{枚举元素1,枚举元素2,...};
如:enum season {spring,summer,autumn,winter};
C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。枚举元素的值取决于定义时各枚举元素排列的先后顺序。
18.typeof关键字:给各种数据类型定义一个新名字(别名)。可以是基本类型,也可以是结构体,枚举。
如:typedef int Integer;
使用的时候就可以这样写了: Integer b =9;
相关文章推荐
- 黑马程序员-IOS学习笔记-C语言基础复杂数据类型
- IOS开发笔记2-C语言基础复习
- iOS笔记:第一篇 C语言基础知识
- ios学习笔记 --(c语言基础4)
- IOS开发笔记8-C语言基础复习
- IOS开发笔记4-C语言基础复习
- 黑马程序员-IOS学习笔记-C语言基础选择结构
- 个人笔记-从零开始iOS开发_C语言基础1
- IOS开发笔记6-C语言基础复习
- IOS开发笔记7-C语言基础复习
- 黑马程序员-ios学习笔记 C语言基础语法
- IOS开发笔记5-C语言基础复习
- IOS开发笔记3-C语言基础复习
- ios开发学习笔记001-C语言基础知识
- 黑马程序员-IOS学习笔记-C语言基础循环结构
- IOS开发笔记9-C语言基础复习
- Java学习笔记之语言基础――Java中的参数传递
- SQL Server 2008技术内幕:T-SQL语言基础 笔记(转)
- 【Professional C# 读书笔记】(二)-----语言基础:继承,运算符,类型转换的杂七杂八
- Java学习笔记之语言基础―― Java中浮点数除0问题