c语言基础知识
goto out;-------------------------->out:(嵌套循环中用于直接到达某个位置,out由自己设定)a[10]={[0]=1,2,[3]=4} -->a[0]=1,a[1]=2,a[3]=4,其余全部为零。*字符串比较--->strcmp(相等返回0,大于返回1,小于返回-1)-----//比较ASCII码值。*strcpy ----->(a,b) 把b复制给a,要
2024.7.2
* 解释语言:由另一程序理解程序并运行
编译语言:翻译为机器语言再由机器执行
*题目中输入是什么格式,scanf里面就敲成什么格式
2024.7.4
*浮点数与整型运算,强转浮点数
*double-->输入%lf 浮点-->输出%f
*单目运算符(+-),优先级最高 |eg。a*-b(a和b相反数相乘)
*a=10-->a++=10,a=11 |a=10-->++a=11 a=11
*16进制-->“%x”
2024.7.5
*关系判断真为1,假为0 printf("%d",5==3)---->0
eg int r=3>0 故r=1
*随机整数代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(0));
int a=rand();
printf("%d",a%100);
return 0;
}
*x%n 得到一个(0-n-1]范围内的数
2024.7.6
*goto out;-------------------------->out:(嵌套循环中用于直接到达某个位置,out由自己设定)
cuo*保留两位小数 “%.2lf”
2024.7.7
*查看变量所占内存 sizeof(int/double/...)
ps.sizeof是静态的,即()内的运算不会发生,如a++等价于a,a+1.0=8(double)
*int用于表达寄存器,即不同设备上int的大小不同
*unsigned 使得负数部分补码无意义,从而扩充正数部分一倍的范围(即纯二进制运算)
*%d--->(<=int) %ld--->long long %u--->unsigned %lu--->unsigned long long
*8进制--> 0.. 16进制--->0x..
*%o---->8进制 %x(X)----->16进制
*%e---->输出科学计数法
*printf输出nan表示不存在的浮点数 printf输出inf表示超过范围的浮点数
*判断浮点数相等
因为浮点数有精度---->fabs(a-b)<1e-12(用于比较的数由数据类型决定)
*字符输入输出%c
%x:无符号十六进制整数(字母小写,不像上面指针地址那样补零)
%X:无符号十六进制整数(字母大写,不像上面指针那样补零)
%x、%X和%p的相同点都是16进制,不同点是%p按编译器位数长短(32位/64位)输出地址,不够的补零
2024.7.10
*逃逸字符
\b 回退一格(用后面的内容代替前面的内容)
\t 下一制表位
*输入(严格要求明确输入的大小)
short--->%hd
*bool------> #include <stdbool.h>
*for(int i=0,int j=10;i<j;i++,j--)
2024.7.12
*块内可以定义与外部同名的变量,该变量在块内覆盖外部该变量的值
2024.7.17
*数组的集成初始化 a[]={1,2,3}--->a[0]=1 a[1]=2 a[2]=3
*C99 指定位置赋值
a[10]={[0]=1,2,[3]=4} -->a[0]=1,a[1]=2,a[3]=4,其余全部为零
*将一个数组的值赋给另外一个数组只能通过遍历
*用sizeof求数组长度 length=sizeof(array)/sizeof(array[0])
*数组在作为函数参数时
1.不能赋予大小,即只能写成a[]
2.不能利用sizeof求大小
2024.7.22
*“,”作为运算符,整个表达式最后的一个值即为表达式的值
* ‘0’ 与‘\0’ 意义不同,‘\0’用于标志字符串的结尾,字符串计算长度不包括‘\0’,占空间但不影响长度
* 字符串以数组形式存在,以数组或指针(居多)形式访问
2024.9.14
*取地址的对象只能是变量,i++,i+i不可以
*指针类型的变量就是保存地址的变量
*表示int型指针变量-->int *p
//对于指针参数的函数
void f(int *p);
//使用时格式为
f(&i);
c语言无法直接传参,通过地址访问并修改
void (int *p){
*p=5;
}
----- main----> int *p=&i; printf("%d",i);
*函数返回值只能有一个,如果想返回多个值,void+指针
*int sum(int *a)与int sum(int a[])是等价的(作为函数原型)
*const加在变量前面意味着变量无法被修改,是常量
int * const q=&i---------->*q=26(√) / q++(×)
const int *q=&i----------->i=26(√) / q=&j(√) / *q=26(×)
*给指针变量更换变量地址,不用带’*‘, eg. p=&j
2024.9.15
*指针运算: p+1---->p的数值加上了一个sizeof(变量类型)
*对指针做减法:p-q输出的结果是在运算结果上除以sizeof(变量类型)
*

2024.9.16

*char *s <=>const char *s (指针s指向的是内存中的只读区域),想要修改,以char s[]方式声明
*字符串输入是%ns 表示只读取前n位
*char *s,s在输入时不会读入空格
2024.9.17
*字符串 <string.h>
*字符串长度 -->strlen(不包括结尾0)
*字符串比较--->strcmp(相等返回0,大于返回1,小于返回-1)-----//比较ASCII码值
*strcpy ----->(a,b) 把b复制给a,要求ab不重叠????
*字符数组初始化 char a[]="\0";
*gets()可直接输入带空格的字符串,性能优于scanf
*函数返回用于返回状态,指针返回用于传值
*声明指针变量一定要指明地址,不允许无地址使用
2024.9.25
*动态内存试验代码
#include <stdio.h>
#include <stdlib.h>
int main(){
int num;
int *a;
scanf("%d ",&num);
a=(int *)malloc(num*sizeof(int));
for(int i=0;i<num;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<num;i++){
printf("%d",a[i]);
}
free(a);
return 0;
}
*malloc 申请内存失败会返回null或0
更多推荐



所有评论(0)