对象具有 地址+类型【数据】
具有名称的对象是变量
& 取地址符
sizeof 读取空间字节数
普通整型和长整型占4字节
短整型占2字节
十六进制前缀加0x;八进制前缀加0
定点格式用小数点分开;指数格式用E 隔开
输出格式:%f是定点格式,保留小数点后6位,不足6位的用0填充
%g定点格式,去掉小数点后无效0
%E是指数格式
逻辑与和逻辑或运算中,若左元结果能代表整个逻辑表达式的结果,那么右元就不再计算(短路)
强制转换格式:(类型标识符)转换对象 ;如 (int)3.14=3; (float)3/4=0.75
选择结构(分支结构):if-else
并列的if 语句(直观,效率低);嵌套if-else(提高执行效率)
switch:每个语句组最后一条一般都是break
循环结构:for ; while-do; do-while (辅助语句:break; continue)
break是直接跳出循环体,continue是提前结束本轮循环,执行下一轮循环;
函数定义格式: 返回值类型标识符 函数名(形参列表)
{
一组语句
}
自动局部变量(即自变量),作用域:其所属函数;生命周期:是所属函数的一次调用时间;其局限性在于:1.不能累计函数被多次调用的结果(引入静态局部变量);2.它所属的函数,不能被多个函数共享(引入外部变量)。
静态局部变量,在声明前加关键字static,必须初始化。生命周期:从初始化开始,到整个程序结束。
函数形参只能是自动局部变量,不能是静态局部变量。
外部变量,在函数外部定义,生命周期:从编译阶段开始,直到程序结束。作用域:其定义下的所有函数。
函数声明意义:1.解决被调函数必须在主函数之前定义问题;2.代码抽象(隐藏函数的实现细节)
求最大公约数:辗转相除法;
判断质数:质数不能被2和这个整数的平方根之间任一整数整除。
数组:
sizeof给出整个数组所占据的内容的大小,单位是字节。
数组变量本身不能赋值。要把一个数组所有元素传给另一个元素必须进行遍历。
遍历数组通常使用For循环,让循环变量从0到<数组长度
判断素数:判断是否能被已知的且<x的素数整除
指针
指针的值所表示的地址上的变量 用 * 来表示 是一个单目运算符
int *p=&i; 相当于 int *p; p=&i;
const 在*前面,则表示指针所指的内容不能被修改,即不能通过指针p给i赋值;(只读性指针)
const在*后面,则表示指针不能被修改,即p不能指向其他。
sizeof(char)=1; sizeof(int)=4;
char ac[ ]={0,1,2};
char *p=ac 相当于 char *p=&ac[0] 相当于 char *p; p=ac; 相当于 char *p; p=&ac[0];
ac 指的是数组的第一个单元地址;ac[0]指的是数组的第一个单元地址中的值;
*p++ : ++ 运算符优先级高于 *
malloc 借空间 ; free 还空间 都包含在系统头文件stdlib.h中
malloc的声名格式为:
void* malloc(unsigned size);
例如:要生成一个长度为5的整型动态数组,则要先申请20个字节的非类型化的空间:
1.void *vp=malloc(20); //void *vp; vp=malloc(20);
2.int*p=(int*)vp; //int*p; p=(int*)vp;
其中(int*)是强制类型转换运算符:从首字节开始,每4字节为一个整型对象,共5个整型对象,p为第一个对象的指针1.1
将1,2合成:
int*p=(int*)malloc(20); //int*p; p=(int*)malloc(20);
使代码具有移植性:
int*p=(int*)malloc(5*sizeof(int));
动态分配两个习惯:
1.没有空间分配则返回NULL
int*p=(int*)malloc(n*sizeof(int));
if(p==NULL){
printf("allocation failure");
exit 1; //终止程序,该函数在stdlib.h中
}
2.当不需要动态数组空间时,要free撤销该空间
free(指针变量名); //撤销动态空间
char**a: a是一个指针,指向另一个指针,那个指针指向一个字符(串);
char a [ ][10]: a[0] --> char [10];
char *a[ ]: a[0]-->char *
int putchar(int c); 向标准输出写一个字符
int getchar(void); 从标准输入读入一个字符
Ctrl+c 强制结束 Windows上 Ctrl+d可返回EOF Unix上 Ctrl+z
1.strlen
size_t strlen(const char*s) 返回s的字符串长度(不包括结尾的0)
2.strcmp
int strcmp(const char *s1,const char *s2);
比较两字符串,返回:0(s1==s2);1(s1>s2); -1(s1<s2);
3.strcpy
char *strcpy(char *restrict dst, const char *restrict src);
把src(源)的字符串拷贝到dst(目的) ;
src和dst不能重叠;
返回dst;
复制一个字符串:
char *dst=(char*)malloc(strlen(src)+1);
strcpy(dst,src);
4.strcat 连接两个字符串
安全版本:
char *strncpy(char *restrict dst,const char*restrict src,size_t n);
char *strncat(char *restrict s1,const char *restrict s2,size_t n);
int strncmp(const char *s1,const char *s2,size_t n);
5.strchr 在字符串中找字符
char *strchr(const char*s,int c); 从左边找出第一c的位置
char *strrchr(const char*s,int c);从右边找出来第一个c的位置
返回Null表示没有找到,找到了就返回那个指针所指的字符
6. strstr 字符串中找字符串
char *strstr(const char *s1,const char *s2);
char *strcasestr(const char*s1,const char*s2); 忽略大小写