C语言—函数、include、多文件开发、进制和内存管理细节


---函数


1.什么情况下定义函数:添加一个常用的新功能

2.函数的定义格式
 返回值类型   函数名(形式参数列表)
{
     函数体
}

3.定义函数需要明确的东西
  a.起一个有意义的函数名
  b.函数体内部不能定义和形参一样的变量

4.形式参数:定义函数时函数名后面中的参数,简称形参
 int sum(int num1, int num2)
{
    // 函数体内部不能定义和形参一样的变量
    // int num1;
    num1 = 50;
  return num1 + num2;

}


5.实际参数:调用函数时传入的具体数据简称实参

6.实参个数必须等于形参个数

7.函数体内部不能定义和形参一样的变量

8.如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值

9.一个函数可以没有形参,也可以有无限多个形参

10.如果不明确声明返回值类型,默认就是int类型
test2()
{
    printf("888888888\n");
    return 10;
}

11.return的作用:
1>退出函数
2>返回一个具体值给函数调用者
返回值注意点:void代表没有返回值;如果没有明确说明返回值类型,默认是返回int类型;就算明确声明了返回值类型,也可以不返回任何值

12.定义函数的步骤
a.根据函数的作用,起一个有意义的名称
b.确定函数的形参个数
c.确定函数的返回值

13.函数的注意点
 1>默认情况下,不允许有函数的名称一样
 2>函数不能嵌套定义
 3>函数不能重复定义,但是可以重复声明
 4>如果有函数的声明,没有函数的定义
 a. 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
 b. 链接报错,因为链接的时候会检测函数是否定义

---include的简单使用和多文件开发

include

 a. 作用:拷贝右边文件的所有内容到#include所在的位置
 b. 自定义的文件用"",系统自带的文件用<>
 c. #include <stdio.h>的目的:拷贝printf函数的声明
 d.可以直接拷贝路径:
    #include "/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0727/代码/include/     
     haha/abc.txt"

---多文件开发

1.多文件开发的原则
1>函数的定义放.c文件,函数的声明放.h文件
2>如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
3>.h文件的作用:被别人拷贝。编译链接的时候不需要管.h文件
4>cc xx.o xxx.o 将多个目标文件链接在一起
  cc xx.c xxx.c 将多个源文件编译、链接

2.如下面三个文件

1>李四.c
/*
李四
 编写基本算数运算的函数
*/
int average(int a, int b)
{
    return (a + b)/2;
}

int sum(int a, int b)
{
    return a + b;
}

int minus(int a, int b)
{
    return a - b;
}

int multiply(int a, int b)
{
    return a * b;
}

2>李四.h

/*
 李四
 编写函数的声明
 */
int average(int a, int b);
int sum(int a, int b);
int minus(int a, int b);
int multiply(int a, int b);

3>张三.c

/*
张三
 编写main函数
 
 链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件

*/
#include <stdio.h>
#include "李四.h"

int main()
{
    int score1 = 100;
    int score2 = 70;
    
    int c = average(score1, score2);
    int d = sum(score1, score2);
    
    printf("平均分是%d\n", c);
    printf("总分是%d\n", d);
    
    // \n是一个转义字符
    // \t tab键
    // \" 一个双引号
    // printf函数返回的字符串常量的字符数,并不是字数
    // 1个汉字占据3个字符
    int e = printf("哈h\"\ta\n");
    
    printf("e=%d\n", e);
    
    return 0;
}

3.补充一些抽象字符
  \n是一个转意字符
  \t tab键
  \" 一个双引号
  printf函数返回的字符串常量的字符数,并不是字数

  1个汉字占据3个字符


---进制和内存管理细节

默认情况下,就是十进制   int number = 12;

在数字前面加上 0b或者0B 就是二进制    int number2 = 0b1100;

在数字前面加上 0 就是八进制     int number3 = 014;
输出
在数字前面加上 0x或者0X 就是十六进制    int number4 = 0xc;

%d\%i  十进制形式输出整数
%c     输出字符
%p     输出地址
%f     输出小数
%o     八进制形式输出整数
%x     十六进制形式输出整数

1.二进制转十进制
 0b1100 = 0 * 2的0次方 + 0 * 2的1次方 + 1 * 2的2次方+ 1 * 2的3次方
        = 0 + 0 + 4 + 8 = 12
 0b1111 = 1 + 2 + 4 + 8 = 15
 0b1010 = 10
 
2.十进制转二进制
 67 = 64 + 2 + 1 = 2的6次方 + 2的1次方 + 2的0次方
    = 0b1000000 + 0b10 + 0b1
  = 0b1000011
 
3.n位二进制的取值范围
 2位二进制位的取值范围:0~3  0~2的2次方-1
 3位二进制位的取值范围:0~7  0~2的3次方-1
 n位二进制位的取值范围:0~2的n次方-1
 
 4个字节 -> 31bit
 0    000 0000 0000 0000 0000 0000 0000 1100
 0 ~ 2的31次方-1

4.内存管理细节

number1先创建先存储,存储地址从大到小,但是返回的number1地址是从第一个字节的地址
number2后创建后存储,存储地址从大到小比number1要小,返回的number1地址也是第一个字节的地址

 字节 变量     内容
 ffc1
 
 ffc2 number2    0000 1101
 ffc3    0000 0000
 ffc4    0000 0000
 ffc5    0000 0000
 
 ffc6 number1    0000 1100
 ffc7    0000 0000
 ffc8    0000 0000
 ffc9    0000 0000

---类型说明符

1.一些基本数据类型的大小和输出符号
int 4个字节     %d
short 2个字节        short == short int 输出用%d
long 8个字节         long == long int   输出用%ld
long long 8个字节                            %lld
signed
unsigned                                    %u

2.signed和unsigned的区别:
     signed 最高位要当做符号位
     unsigned 最高位不要当做符号位

     signed == signed int
    // signed 有符号:正数、0、负数

     unsigned int == unsigned(表示的范围比signed要大一倍)
    // unsigned 无符号:0、正数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值