您的位置:首页 > 编程语言 > C语言/C++

[黑马程序员]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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: