[黑马程序员]10[C语言]C语言基本语法与基本语句部分需要注意的几个知识点
2015-04-15 02:12
363 查看
-------
android培训、java培训、IOS培训、期待与您交流! ----------
1. 函数
//函数的好处:把复杂的代码封装到一个函数块里去,可以精简化代码
//什么情况下定义函数:添加一个常用的新功能
//函数的定义格式:
//返回值类型函数名(形式参数列表)
//{
//
函数体
//}
//定义一个函数:1.起一个有意义的函数名
//#include <stdio.h>
//
//int printLine()
//{
// printf("*********\n");
// return 0;
//}
//
//int average(int num1,intnum2)
//{
// return (num1 +num2)/2;//return的作用:1.函数结束2.给函数返回一个返回值
//}
//
//int main()
//{
//// printLine();
//// printLine();
// int a =10;
// int b =9;
// int addition = a+b;
// int subtraction = a-b;
// int multiplication = a*b;
// int division = a/b;
// int c = average(a, b);//函数封装好后需要执行函数的功能,这个时候直接调用函数就行了,不用管内部具体实现
// //int c = (a +b)/2
// //这些运算功能都可以封装到函数里去
// return 0;
//}
//#include <stdio.h>
////形式参数:定义函数时函数名后面的参数,形参
////实际参数:调用函数时传入的具体数据,实参
////实参个数必须等于形参个数
////函数体内部不能定义和形参一样的变量
////实参对形参纯粹是值传递,没有干涉关系,改变形参不会影响实参的值
2. 位运算
//位运算符有下面几类:
//1.按位与(&)
//2.按位或(|)
//3.按位异或(^)发音hat
//4.左移运算符(<<)
//5.右移运算符(>>)
//6.按位取反(~)发音tilde
//1.按位与(&)
//同1则为1,其余都为0
//2.按位或
//特殊下像加法
//3.按位异或(^)
//相同为0,相异为1
//特殊下像减法
int anWeiYu(int n1,int n2);
int anWeiHuo(int n1,int n2);
int anWeiYiHuo(int n1,int n2);
int anWeiQuFan(int n1,int n2);
int main()
{
int n1,n2;
int c1,c2,c3,c4;
printf("输入n1,n2:\n");
scanf("%d,%d",&n1,&n2);
c1 =
anWeiYu(n1, n2);
c2 =
anWeiHuo(n1, n2);
c3 =
anWeiYiHuo(n1, n2);
c4 =
anWeiQuFan(n1, n2);
printf("按位与的结果为:%d\n",c1);
printf("按位或的结果为:%d\n",c2);
printf("按位异或的结果为:%d\n",c3);
printf("按位取反的结果为:%d\n",c4);
return0;
}
int anWeiYu(int n1,int n2)
{
return n1 &n2;
}
//可以利用按位与获得某一个数字的某一个二进制位的值
//应用:可以获得最左边二进制位的数字
int anWeiHuo(int n1,int n2)
{
return n1 | n2;
}
int anWeiYiHuo(int n1,int n2)
{
return n1 ^ n2;
}
int anWeiQuFan(int n1,int n2)
{
return ~n1;
}
//两个参数值的互换
//1.额外参数temp
//2.加减法(乘除也行)
//3.异或(或和异或也行)
//4.在Java和C#中有:num1
=num2 + (num2 =num1)*0;这里也行
//凡是互为逆运算的都可以实现两个参数值的互换
//左移运算符:将数字的二进制格式的数字往左边移动一个二进制位,右边不够的补0
//右移运算符:将数字的二进制格式的数字往右边移动一个二进制位,左边不够的补符号位
//int main()
//{
// //printf("%d\n",1<<2);
//
// for (int i =0; i <8; i++) {
// printf("%d\n",256>>i);
// }
//
// return 0;
//}
//常见的应用
//1.计算2的整数倍的幂(代码不好阅读,砍掉)
//2.做标志枚举
//1表示东,2表示南,4表示西,8表示北(仅占一个数据位)东
|北1001标志枚举
//3.计算一个数字的2进制格式
//和1做按位与,右移,
继续按位与,
右移,从而读取2进制格式
//先移31位,和1按位与,然后30位,和1按位与,一直读完,从而读取2进制顺位
//获取一个数字的二进制格式
void transferBinary(int n,int length);
int calCount(int n);
int main()
{
int n;
printf("输入数字\n");
scanf("%d",&n);
int length =calCount(n);
printf("这个数的二进制格式为:\n");
transferBinary(n,length);
return0;
}
int calCount(int n)
{
int count =0;
while (n !=0) {
n =n>>1;
count++;
}
return count;
}
void transferBinary(int n,int length)
{
//printf("这个数的二进制格式为:\n");
for (int i =length -1; i >=0; i--) {
// int temp = n&1;
// printf("%d",temp);
// n >>=1;
printf("%d",(n>>i)&1);
if (i%4==0) {
printf(" ");
}
}
printf("\n");
}
3. 内存管理
//程序运行,一定要有内存
//每隔函数在运行的时候,操作系统都会为其维护一个内存
//每一个函数运行时分配的内存,成为栈内存(线程栈,堆栈)
//1>栈
//2>数据储存是从高地址向低地址进行分配
//3>数据的内存是连续分配
//4>运行函数的时候,内存会分配,函数运行结束后,内存回收
// 1.什么是内存管理
//
所谓的内存管理,就是维护内存的分配,使用和销毁.实际开发过程中,声明的局部变量,全局变量都不需要考虑内存管理的问题
// 1>对于全局变量(static变量,extern变量)从程序加载到内存开始初始化,直到程序结束才会释放
// 2>对于局部变量(在函数里定义的变量,除了static与regester修饰的变量)函数执行开始分配内存,函数运行结束回收内存
//
除非程序员编写了申请内存的代码,那么这个内存就需要手动的维护管理
// 2,为什么要使用动态分配的内存?使程序具有更强大的适应能力在使用字符指针的时候,无法实现输入int
*str[256];内存大小固定
// 3.有哪些函数需要考虑内存管理呢?
// malloc void *malloc(size_t);指针malloc(字节数);
// calloc 指针 calloc(单位字节大小,数量);
calloc(4,10);
// realloc 指针 realloc(大小,指针);
//free(指针)相当于dealloc
4. static
//static,extern
//1>函数
//2>变量
//函数的类型
//外部函数:定义的函数能被本文件和其他文件访问,
//1>默认情况下所有函数都是外部函数
//2>整个项目的函数不允许重名
//内部函数:定义的函数只能被本文件访问,其他文件不能访问
//1>允许不同文件中又同名的内部函数
//2>不可省略
int main()
{
test();
test2();
return0;
}
//extern完整地定义一个外部函数,extern完整地声明一个外部函数
//extern可省略
externvoid test()
{
printf("88\n");
}
//static定义一个外部函数,static声明一个外部函数
//static不可省略
staticvoid test2()
{
printf("22\n");
}
//全局变量分两种:
//外部变量:定义的变量能被本文件和其他文件访问
//1>默认情况下,所有的全局变量都是外部变量
//2>不同文件中得同名外部变量,都代表一个变量
//内部变量:定义的变量只能被本文件访问
//1>不同文件中得同名内部变量,互不影响
//完整地定义一个外部函数,可以省略
externint a;
//定义一个内部函数
staticint b;
//static int a;
void test()
{
int a =0;
a++;
printf("a的值为%d\n",a);
//static修饰局部变量:
//1>延长局部变量的生命周期:程序结束的时候,局部变量才会销毁
//2>并没有改变局部变量的作用域
//3>所有的test函数都共享着一个变量b(把一个函数内常用的变量给与static,能提高性能)
//static修饰局部变量的使用场合:
//1.如果这个函数的使用频率特别高
//2.这个函数内部的某个变量值是固定不变的
staticint b=0;
b++;
printf("b的值为%d\n",b);
}
android培训、java培训、IOS培训、期待与您交流! ----------
1. 函数
//函数的好处:把复杂的代码封装到一个函数块里去,可以精简化代码
//什么情况下定义函数:添加一个常用的新功能
//函数的定义格式:
//返回值类型函数名(形式参数列表)
//{
//
函数体
//}
//定义一个函数:1.起一个有意义的函数名
//#include <stdio.h>
//
//int printLine()
//{
// printf("*********\n");
// return 0;
//}
//
//int average(int num1,intnum2)
//{
// return (num1 +num2)/2;//return的作用:1.函数结束2.给函数返回一个返回值
//}
//
//int main()
//{
//// printLine();
//// printLine();
// int a =10;
// int b =9;
// int addition = a+b;
// int subtraction = a-b;
// int multiplication = a*b;
// int division = a/b;
// int c = average(a, b);//函数封装好后需要执行函数的功能,这个时候直接调用函数就行了,不用管内部具体实现
// //int c = (a +b)/2
// //这些运算功能都可以封装到函数里去
// return 0;
//}
//#include <stdio.h>
////形式参数:定义函数时函数名后面的参数,形参
////实际参数:调用函数时传入的具体数据,实参
////实参个数必须等于形参个数
////函数体内部不能定义和形参一样的变量
////实参对形参纯粹是值传递,没有干涉关系,改变形参不会影响实参的值
2. 位运算
//位运算符有下面几类:
//1.按位与(&)
//2.按位或(|)
//3.按位异或(^)发音hat
//4.左移运算符(<<)
//5.右移运算符(>>)
//6.按位取反(~)发音tilde
//1.按位与(&)
//同1则为1,其余都为0
//2.按位或
//特殊下像加法
//3.按位异或(^)
//相同为0,相异为1
//特殊下像减法
int anWeiYu(int n1,int n2);
int anWeiHuo(int n1,int n2);
int anWeiYiHuo(int n1,int n2);
int anWeiQuFan(int n1,int n2);
int main()
{
int n1,n2;
int c1,c2,c3,c4;
printf("输入n1,n2:\n");
scanf("%d,%d",&n1,&n2);
c1 =
anWeiYu(n1, n2);
c2 =
anWeiHuo(n1, n2);
c3 =
anWeiYiHuo(n1, n2);
c4 =
anWeiQuFan(n1, n2);
printf("按位与的结果为:%d\n",c1);
printf("按位或的结果为:%d\n",c2);
printf("按位异或的结果为:%d\n",c3);
printf("按位取反的结果为:%d\n",c4);
return0;
}
int anWeiYu(int n1,int n2)
{
return n1 &n2;
}
//可以利用按位与获得某一个数字的某一个二进制位的值
//应用:可以获得最左边二进制位的数字
int anWeiHuo(int n1,int n2)
{
return n1 | n2;
}
int anWeiYiHuo(int n1,int n2)
{
return n1 ^ n2;
}
int anWeiQuFan(int n1,int n2)
{
return ~n1;
}
//两个参数值的互换
//1.额外参数temp
//2.加减法(乘除也行)
//3.异或(或和异或也行)
//4.在Java和C#中有:num1
=num2 + (num2 =num1)*0;这里也行
//凡是互为逆运算的都可以实现两个参数值的互换
//左移运算符:将数字的二进制格式的数字往左边移动一个二进制位,右边不够的补0
//右移运算符:将数字的二进制格式的数字往右边移动一个二进制位,左边不够的补符号位
//int main()
//{
// //printf("%d\n",1<<2);
//
// for (int i =0; i <8; i++) {
// printf("%d\n",256>>i);
// }
//
// return 0;
//}
//常见的应用
//1.计算2的整数倍的幂(代码不好阅读,砍掉)
//2.做标志枚举
//1表示东,2表示南,4表示西,8表示北(仅占一个数据位)东
|北1001标志枚举
//3.计算一个数字的2进制格式
//和1做按位与,右移,
继续按位与,
右移,从而读取2进制格式
//先移31位,和1按位与,然后30位,和1按位与,一直读完,从而读取2进制顺位
//获取一个数字的二进制格式
void transferBinary(int n,int length);
int calCount(int n);
int main()
{
int n;
printf("输入数字\n");
scanf("%d",&n);
int length =calCount(n);
printf("这个数的二进制格式为:\n");
transferBinary(n,length);
return0;
}
int calCount(int n)
{
int count =0;
while (n !=0) {
n =n>>1;
count++;
}
return count;
}
void transferBinary(int n,int length)
{
//printf("这个数的二进制格式为:\n");
for (int i =length -1; i >=0; i--) {
// int temp = n&1;
// printf("%d",temp);
// n >>=1;
printf("%d",(n>>i)&1);
if (i%4==0) {
printf(" ");
}
}
printf("\n");
}
3. 内存管理
//程序运行,一定要有内存
//每隔函数在运行的时候,操作系统都会为其维护一个内存
//每一个函数运行时分配的内存,成为栈内存(线程栈,堆栈)
//1>栈
//2>数据储存是从高地址向低地址进行分配
//3>数据的内存是连续分配
//4>运行函数的时候,内存会分配,函数运行结束后,内存回收
// 1.什么是内存管理
//
所谓的内存管理,就是维护内存的分配,使用和销毁.实际开发过程中,声明的局部变量,全局变量都不需要考虑内存管理的问题
// 1>对于全局变量(static变量,extern变量)从程序加载到内存开始初始化,直到程序结束才会释放
// 2>对于局部变量(在函数里定义的变量,除了static与regester修饰的变量)函数执行开始分配内存,函数运行结束回收内存
//
除非程序员编写了申请内存的代码,那么这个内存就需要手动的维护管理
// 2,为什么要使用动态分配的内存?使程序具有更强大的适应能力在使用字符指针的时候,无法实现输入int
*str[256];内存大小固定
// 3.有哪些函数需要考虑内存管理呢?
// malloc void *malloc(size_t);指针malloc(字节数);
// calloc 指针 calloc(单位字节大小,数量);
calloc(4,10);
// realloc 指针 realloc(大小,指针);
//free(指针)相当于dealloc
4. static
//static,extern
//1>函数
//2>变量
//函数的类型
//外部函数:定义的函数能被本文件和其他文件访问,
//1>默认情况下所有函数都是外部函数
//2>整个项目的函数不允许重名
//内部函数:定义的函数只能被本文件访问,其他文件不能访问
//1>允许不同文件中又同名的内部函数
//2>不可省略
int main()
{
test();
test2();
return0;
}
//extern完整地定义一个外部函数,extern完整地声明一个外部函数
//extern可省略
externvoid test()
{
printf("88\n");
}
//static定义一个外部函数,static声明一个外部函数
//static不可省略
staticvoid test2()
{
printf("22\n");
}
//全局变量分两种:
//外部变量:定义的变量能被本文件和其他文件访问
//1>默认情况下,所有的全局变量都是外部变量
//2>不同文件中得同名外部变量,都代表一个变量
//内部变量:定义的变量只能被本文件访问
//1>不同文件中得同名内部变量,互不影响
//完整地定义一个外部函数,可以省略
externint a;
//定义一个内部函数
staticint b;
//static int a;
void test()
{
int a =0;
a++;
printf("a的值为%d\n",a);
//static修饰局部变量:
//1>延长局部变量的生命周期:程序结束的时候,局部变量才会销毁
//2>并没有改变局部变量的作用域
//3>所有的test函数都共享着一个变量b(把一个函数内常用的变量给与static,能提高性能)
//static修饰局部变量的使用场合:
//1.如果这个函数的使用频率特别高
//2.这个函数内部的某个变量值是固定不变的
staticint b=0;
b++;
printf("b的值为%d\n",b);
}
相关文章推荐
- 黑马程序员_ios基础总结2_C语言基本语法一
- [黑马程序员]12[OC语言]OC基本语法部分学习笔记总结
- 黑马程序员_ios基础总结3_C语言基本语法二
- 重学C++Primer笔记5---一些基本语法需要特别注意的地方
- 黑马程序员_ios基础总结4_C语言基本语法三
- 黑马程序员————C语言基本语法(数组、字符串、指针、其他数据类型)
- 黑马程序员_ios基础总结5_C语言基本语法四
- 学习使用mysql需要注意的几个sql语句
- 关于循环语句中的几个需要注意的地方
- JavaScript使用过程中需要注意的地方和一些基本语法
- 黑马程序员_ios基础总结6_C语言基本语法五
- java学习基础需要注意的几个知识点
- 黑马程序员——Java的基本语法:if语句、for循环、while循环嵌套
- 【mysql】mysql中需要注意的几个sql语句
- 学习java基础时需要注意的几个知识点
- sql语句中几个需要注意的点
- 黑马程序员-C语言的几个基本数组
- 面向对象程序语言设计中应该注意的几个基本知识点
- HTML超文本标记语言基本语法结构与“head”部分的知识点