C语言基础

1.结构体定义:
struct part{

}part1,part2;
struct part part3 = { , , };

typedef struct{

}Part;
Part part1,part2;
2.结构体的赋值
strcpy(student.name.frist,“Fred”);
3.声明的分类:
存储类型分为:auto、static、extern、register
auto存储类型只对属于块的变量有效,auto存储类型几乎从来不用显式的指明,因为在块内部是默认的。
static存储类型可以用于全部变量,而无需考虑变量声明的位置。(静态存储期),只有出现在同一文件的函数可以访问变量。
extern存储类型使几个源文件可以共享同一变量。extern声明的变量始终具有静态存储期。声明位置决定作用域。
register存储类型就要求编译器把变量存储在寄存器中。寄存器是驻留在计算机CPU中的存储单元。(而不是像其他变量一样保存在内存之中。)
因为寄存器没有地址,所以对register变量使用取地址运算符&是非法的。
类型限定符:const和volatile。
const,程序可以访问const对象,但是无法改变它的值。
const对象不可以用于常量表达式。
如果数组是形式参数,或者数组有初始化器,再或者数组的存储类型为extern,那么方括号内可以为空。例如 extern int a[];
类型制定符:void、char、short、int、long、float、double、signed。
char      1(byte) 8 (bit)
short     2(byte) 16(bit)
int         4(byte) 32(bit)
long      4(byte) 32(bit)
float      4(byte) 32(bit)
double  8(byte) 64(bit)
4.sizeof和strlen的区别:
sizeof求数组时,大小等于数组元素个数每个元素的大小(其中,计算字符串数组是需要计算结束符’\0’,这是与strlen的区别strlen不计算最后的’\0’。
5.插值查找法:
Mid = Begin + ( (End - Begin) / (A[End] - A[Begin]) ) * (X - A[Begin])
式子中,各部分的含义分别是:
Mid:计算得出的元素的位置;
End:搜索区域内最后一个元素所在的位置;
Begin:搜索区域内第一个元素所在的位置;
X:要查找的目标元素;
A[]:表示整个待搜索序列。
计算得出的元素位置=搜索区域的内第一个元素所在的位置+(搜索区域内最后一个元素所在的位置-搜索区域内的第一个元素所在的位置)/(A(搜索区域内最后一个元素所在的位置)-A(搜索区域内第一个元素所在的位置))
(要查找的目标元素-A[搜索区域内第一个元素所在的位置])。
6.循环
while循环在循环体执行之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for语句则非常适合那些递增递减计数变量的循环。
break语句用来跳出循环并把程序控制传递到循环后的下一条语句,
continue语句用来跳过本次循环的剩余部分,
而goto语句则可以跳到函数内的任何语句上。
goto案例:
for(d=2;d<n;d++)
if(n%d==0)
goto done;
done:
if(d<n)
printf(“%d is divisible by %d\n”,n,d);
else
printf(“%d is prime\n”,n);
exit函数:
在main函数中执行return语句是终止程序的一种方法,另外一种方法是调用exit函数。此函数属于<stdlib.h>
exit(EXIT_SUCCESS);传递异常终止exit(EXIT_FAILURE); EXIT_SUCCESS和EXIT_FAILURE都是定义在<stdlib.h>中的宏,分别是0和1。
7.#include“”和#include<>区别
区别是若 #include “” 查找成功,则遮蔽 #include <> 所能找到的同名文件;否则再按照 #include <> 的方式查找文件。另外标准库头文件都放在 #include <> 所查找的位置。
一般来说 #include <> 的查找位置是标准库头文件所在目录, #include “” 的查找位置是当前源文件所在目录。
8.格式字符
%d整型输出,%ld长整型输出
%o以八进制数形式输出整数
%x以十六进制数形式输出整数,或输出字符串的地址
%p是打印地址(指针地址)的,是十六进制的形式
%u以十进制输出unsigned型数据(无符号数)。注意%d与%u有无符号的数值范围。
%c用来输出一个字符
%s用来输出一个字符串
%f用来输出实数,以小数形式输出,默认情况下保留小数点6位。
%.100f用来输出实数,保留小数点后100位
%e以指数形式输出实数
%g根据大小自动化选f格式或e格式,不输出无意义的零。
9.二位数组和指针
a代表数组首元素的首地址,也是a[0]的首地址,即a+1(是下一个元素的首地址)偏移一行,即a[1](在二维数组中a[1]等价于a[1][0])的首地址。
&a是“整个”数组的首地址,即&a+1是下一个n(当前维数)维数组的首地址,即&a+1偏移了整个数组大小。
a[0]代表的是这里的一维数组a[0]的首元素的地址,即a[0]+1偏移了一个元素的地址。
&a[0]代表此数组首元素的首地址,即数组a[0]的首地址,与a相同,等价于行指针,&a[0]+1偏移了一行。
&a[0][0]代表此数组的首元素的首元素的地址,即a[0][0]的地址,&a[0][0]+1表示偏移了此数组的首元素的一个元素的地址。
10.关于数组指针
++p等价于(++p),表示先取得第n个元素的值,再将p指向下一个元素。
*++p 等价于 *(++p),会先进行 ++p 运算,使得 p 的值增加,指向下一个元素,整体上相当于 *(p+1),所以会获得第 n+1 个数组元素的值。
(p)++ 就非常简单了,会先取得第 n 个元素的值,再对该元素的值加 1。假设 p 指向第 0 个元素,并且第 0 个元素的值为 99,执行完该语句后,第 0 个元素的值就会变为 100。
11.指针的属性
使用指针变量前一定要初始化,否则就不能确定指针指向哪里,如果它指向的内存没有使用权限,程序就崩溃了。对于暂时的没有指向的指针,建议赋值NULL。
两个指针变量可以相减。如果两个指针变量指向同一个数组中的某个元素,那么相减的结果就是两个指针之间相差的元素个数。
数组也是有类型的,数组名的本意是表示一组类型相同的数据,在定义数组时,或者和sizeof、&运算符一起使用时数组名才表示整个数组,表达式中的数组名会被转换成一个指向数组的指针。
12.完全二叉树与堆
完全二叉树是一种特殊的二叉树,任何一个节点不能只有右子树没有左子树,叶子节点出现在最后一层或者倒数第二层,不能再往上了。
堆结构,本质就是用数组实现的完全二叉树。堆在使用上具体分为大根堆和小跟堆,在完全二叉树中如果每个树的最大值都在顶部就是大根堆,而如果每棵树的最小值都在顶部就是小跟堆。
13.malloc函数
调用malloc函数时,malloc函数的返回值是一个
void,如果需要赋值给其他类型的变量,需要在malloc前面加一个强制转换例如:
student p = (student)malloc(sizeof(student));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值