基础(二进制操作、判断字符长度(数据大小)、排序、简单结构体和指针)
编译器(vs2013):
打印至控制台:VS2013 (项目名称右击鼠标--属性--配置属性--链接器--系统--子系统<改为控制台>)
字体大小:ctrl + 鼠标滚轮可修改字体大小
1.每个文件第一行添加东西:找到安装目录 -- vc -- vcprojectitems -- newc++file.cpp(此文件添加:#define _CRT_SECURE_NO_WARNINGS)
10.如果发现光标占了一个位置按下 insert 即可
符号:
二进制操作: << >> & | ^ ~ 源码 反码 补码;
二进制简单转换:
二进制: 1 1 1 1 十进制: 1*2^3=8 1*2^2=4 1*2^1=2 1*2^0=1 如:十进制3=0011(2+1);十进制5=0101(4+1) 其它进制转成十进制也是一样如八进制: 八进制: 1 3 2 十进制: 1*8^2=64 3*8^1=24 2*8^0=2
<< (二进制左移):转换成二进制数据整体向左移动一位,右边空出来一位补0;
& (按位与):转换成二进制数据只要其中有一个为假(0)则结果为假(0),也就是只有两个同时为真(1)结果才为真(1);
| (按位或):转换成二进制数据只要其中有一个为真(1)则结果为真(1),也就是只有两个同时为假(0)时结果才为假(0);
^ (按位异或):转换成二进制数据两个数字相同是为0,两数字相异时为1;
~ (按位取反):字面意思;
注:
1:有符号的整形,最高位是符号位,1是负数,存的是补码 ;源码符号位不变其它取反得到反码,反码加一得到补码;任何整数数在内存里存的都是补码,反码是中间状态。正数 源码、反码、补码相同;负数存的就是反码;
2:int a = 10;int b = a++; // a = 11; b = 10; 不管怎样a都会改变 ++在后面接数为原来的值
3:0x00000014中0x表示的是存储的是16进制的数据
4:大端字节存储是指高位放在低地址处, 小端字节存储是指地位放在低地址处。如要存储0x11223344,大端存储为:0x11223344,小端存储为:0x44332211
5:static修饰局部变量会使其生命周期变长且不销毁,修饰全局变量和方法会让它只能在本文件内使用
6:函数内返回栈空间的地址是没用的,出了这个函数就没有了;可以用static修饰一下(static修饰局部变量会使其生命周期变长且不销毁),使其变成静态空间里的地址;或者返回动态开辟的空间(堆区里的)。
函数:
打印:printf("xxx\n");// 库函数 基于stdio.h
接受并自定义字符:scanf("%d%d", &a1, &a2); // 库函数 基于stdio.h
判断字符长度:
char a[] = {'a','a','\0'}; char a1[] = "aa" printf("%d",strlen(a));
// 库函数 基于stdio.h
判断数据大小:
printf("%d\n", sizeof(int)); printf("%d\n", sizeof(char*));
// 库函数 基于string.h
修改结构体里的数组:strcpy(s.name, "李四"); // 库函数 基于string.h
断言:
assert(xx != NULL) // 接一个表达式,条件不成立时报错;库函数 基于 assert.h
快速排序:
int cmp_int(const void* e1, const void* e2){ // 比较两个整形值的大小,1大于,0等于,-1小于 return *(int*)e1 -*(int*)e2; } int main(){ int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; int sz = sizeof(arr) / sizeof(arr[0]); qsort(arr, sz, sizeof(arr[0]), cmp_int); int i = 0; for (i = 0; i < sz; i++){ printf("%d ", arr[i]);} return 0; }; ------------------------------------ int cmp_float(const void*e1, const void*e2){ // 比较两个浮点型的大小,1大于,0等于,-1小于 return ((int)(*(float*)e1 - *(float*)e2)); } int main(){ float f[] = { 9.0, 8.0, 7.0, 6.0, 5.0, 4.0 }; int sz = sizeof(f) / sizeof(f[0]); qsort(f, sz, sizeof(f[0]), cmp_float); int j = 0; for (j = 0; j < sz; j++){ printf("%f ", f[j]); } return 0; }; ---------------------------------------
修改预处理结构默认对齐数:
#pragma pack(4) // 设置默认对齐数4,一般设置2的次方数,如果没有设置设计的时间小小放在一起。注:32位的每次读4个字节 struct S { char c1;//1 double d;//8 4 4 }; #pragma pack() // 取消设置的默认对齐数
找出结构体里每一项相对于起始位置的便宜量:
struct S{ char c; int i; double d; }; int main(){ printf("%d\n", offsetof(struct S, c)); // 0 printf("%d\n", offsetof(struct S, i)); // 4 printf("%d\n", offsetof(struct S, d)); // 8 return 0; } // offseto宏,基于stddef.h
结构体及指针:
// 注:int a = 10; int* p = &a; printf("%d\n",*p); 打印p是地址 // 不加*就是地址 ,加就是内容
struct st {
char name[20];
int age;
char sex[5];
int id;
};
struct st t = { "李四", 18, "男", 1250 };
struct st s = { "张三", 18, "男", 1250 };
struct st* p = &s;
printf("%s\n", p->name); // 通过地址的方式 int* 大小及地址大小
printf("%s\n", (*p).name); // 通过内容的方式
//s.age = 30;
//printf("%d\n", s.age);
//strcpy(s.name, "李四");
//printf("%s\n", s.name);
本文来自博客园,作者:封兴旺,转载请注明原文链接:https://www.cnblogs.com/fxw1/p/14649250.html