---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
今天继续了函数的学习,并进入了剖析内存的课题
一、函数
1.练习
1>求两个整数的差
2>打印N条横线
/*
练习题:
1.求两个整数的差
2.打印一条横线
3.打印N条横线
定义函数的步骤
1>根据函数的作用,起一个有意义的名称
2>确定函数的形参个数
3>确定函数的返回值
*/
#include <stdio.h>
void printLines(int n)
{
for (int i = 0; i < n ; i++) {
printf("----------------\n");
}
}
int minus (int a ,int b)
{
return a - b;
}
int main(int argc, const char * argv[])
{
printLines(6);
printf("两个数的差是:%d",minus(6 , 9));
return 0;
}
2.函数使用注意事项
1>编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
2>链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件
#include <stdio.h>
/*
1.默认情况下,不允许有函数的名称一样。
2.函数不能嵌套定义
3.函数不能重复定义,但是可以重复声明
4.如果有函数的声明,没有函数定义
1>编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
2>链接报错,因为链接的时候会检测函数是否定义
5.链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件
*/
//函数的声明
//void printLine();
//void printLine();
//void printLine();
//void printLine();
//void printLine();
void printLine();
int main(int argc, const char * argv[])
{
void printLine();
printLine();
return 0;
}
3.include的相关使用
1>作用:拷贝右边的文件的所有内容到#include所在的位置
2>自定义的文件用"",系统自带的文件用<>
3>#include<stido.h>的目的:拷贝printf函数的声明
4>绝对路径与相对路径
绝对路径: /Users/huangchao/Downloads(最前面有/)
表示不管地址在哪儿,都从根目录环境下开始寻找文件
相对路径: Users/huangchao/Downloads(最前面没有/)
表示从当前地址下,开始寻找文件
4.多文件团队开发
//编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
//链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件
/*
这是在Unix情况下操作
1.函数的定义放.c文件,函数的声明放.h文件
2.如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
3. .h文件的作用:被别人拷贝。编译链接的时候不需要管.h文件
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
// \n是一个转义字符
printf("哈哈\n");
// \t tab键
printf("哈哈\t哈哈\n");
// \"输出一个“
int e = printf("哈\”\t哈\n");
//printf函数返回的字符串常量的字符数,并不是字数
//1个汉字占据3各字符
printf("e = %d\n",e);
return 0;
}
二、剖析内存
1.进制代码编写
/*
%d\%i 十进制形式输出整数
%c 输出字符
%p 输出地址
%f 输出小数
%o 八进制形式输出整数
%x 十六进制形式输出整数
*/
int main(int argc, const char * argv[])
{
//默认情况下,就是十进制
int number = 12;
// 二进制(0b或者0B开头)
//只有0和1,逢2进1,变量在内存中就是二进制存储
int number2 = 014;
//八进制(0开头)
//0~7,逢八进一
int number3 = 0b1010;
//十六进制(0x或者0X开头)
//%d以10进制整数的形式输出一个数值
//0~F,逢十六进一
int number4= 0xc;
printf("%d\n",number);
printf("%d\n",number2);
printf("%d\n",number3);
printf("%d\n",number4);
return 0;
}
下图是printf输出不同进制数据选择
2.变量在内存中得储存细节
#include <stdio.h>
//内存内存存储细节也用execl表示出来,看图
int main(int argc, const char * argv[])
{
//一个int类型数据占据4个字节、32bit
//0000 0000 0000 0000 0000 0000 0000 1100
int number = 12; //1100
//0000 0000 0000 0000 0000 0000 0000 1101
int number2 = 13;//1101
printf("Hello, World!\n");
return 0;
}
下图是储存形象图
3.二进制与十进制之间的转换
#include <stdio.h>
/*
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
00 0
01 1
10 2
11 3
3位二进制的取值范围:0~7 0~2的3次方-1
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
n位二进制的取值范围:0~2的n次方-1
*/
int main(int argc, const char * argv[])
{
// insert code here...
printf("Hello, World!\n");
return 0;
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------