ios笔记--C语言基础笔记

来源:互联网 发布:java 社招 经验 编辑:程序博客网 时间:2024/05/16 09:32

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.常用的基本类型:

类型名称 存储空间(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个字节








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;

0 0