今日是二零一伍年八月二十二日,今天在我们的课堂上,德国的学长带我们复习了一下C语言,可以说,也是从另外一个视角带我们看了很多以前看不到的东西。这里做一个综合的笔记。
1、在printf的格式化输出里,usigned int的表示是%u。这里也复习一下其他比较常用的格式化输出:
%d 有符号十进制整数(int)(%ld:长整型数据(long) , %hd:输出短整形。)
%o 无符号八进制整数
%p 指针
%s 对应字符串char*
%x 使用十六进制数字0f的无符号十六进制整数
%% 打印一个百分号
%e 以指数形式打印浮点数
%g 在e和f中选择一种”比较好“的方法打印
2、在C语言的for语句中,计数器(i)的初始化要放在for语句外部。
int main (){
int i ;
for ( i = 0 ; i < n ; i ++ ){//code}
return 0 ;
}
3,学习到一个函数,叫atoi(),它可以把数组型字符串里的数字提取出来,做成整型。比如,这样一个使用方法:
// atoi.cpp
#include <cstdio>
#include <iostream>
#include "stdlib.h"
using namespace std ;
int main (){
char a[] = " 12345a" ;
char b[] = " a12345" ;
char c[] = " 2a13124" ;
printf("%d\n", atoi(a) ) ;
printf("%d\n", atoi(b) ) ;
printf("%d\n", atoi(c) ) ;
return 0 ;
}
它的输出结果是:
12345
0
2
这也就证明了它的检索模式:跳过字符串中所有的空格,然后从不是空格的第一个字符开始,直到检索到非数字字符时,停止。
4、了解到c语言中自带的三种自带宏:__func__、__LINE__、__FILE__。他们的类型分别是字符串、整型和字符串。
5、至于第五点,我们先看一个代码:
type* name3 , name4 ;
这个代码看上去声明了两个type的指针,但是,其实只有name3是指针,name4其实还是type的一个对象罢了。其实,这样的写法更好帮助我们理解:
type *name3 , name 4;
6、在函数中如果传入参数是const int* iptr,它代表着,在函数中,无论是修改这个指针所指的对象和对象的值都是不允许的。
7、现在我们来看看c语言的空间申请。c语言的空间申请中有一个函数叫做malloc(),它的函数原型是这样的:
void *malloc(int size) ;其中void*指针是一个全指针,当我们需要使用的时候,可以把它强制转化成我们需要的指针变量。比如我们一般这样调用这个函数:
#include<stdio.h>
#include<malloc.h>
int main()
{
char *p = (char *) malloc(100) ;
free(p) ;
return 0 ;
}
函数前面的(char * )就是尝试将void*转换成字符的指针。然后,在malloc后是必须要传参数的,它不能像new那样,自动给一个类型的空间。当然,还有重要的一点,malloc函数只能分配,不会对分配的空间初始化。但是我们的calloc函数就可以达到初始化的功能,不过它的传参模式和我们的malloc有点不同。
8、然后说一下<<的使用,它的作用其实是可以将数字做一次二进制提升。也就是在二进制排列表里面把所有数都升以为,相当于:
a << n 三 a * (2^n)
9、c语言里面原来是没有bool值的