C-lang
273
1 分钟 &符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上
struct Point
{
int x;
int y;
};
char a;
short b;
int c;
Point p;
printf("%p %p %p %p \n",&a,&b,&c,&p);
printf("%x %x %x %x \n",&a,&b,&c,&p);
printf("%x \n",&10);
16: char a;
17: short b;
18: int c;
19: Point p;
20:
21: printf("%p %p %p %p \n",&a,&b,&c,&p);
0040D408 lea eax,[ebp-14h]
0040D40B push eax
0040D40C lea ecx,[ebp-0Ch]
0040D40F push ecx
0040D410 lea edx,[ebp-8]
0040D413 push edx
0040D414 lea eax,[ebp-4]
0040D417 push eax
0040D418 push offset string "%p %p %p %p \n" (00422e90)
0040D41D call printf (0040d6c0)
0040D422 add esp,14h
22: printf("%x %x %x %x \n",&a,&b,&c,&p);
0040D425 lea ecx,[ebp-14h]
0040D428 push ecx
0040D429 lea edx,[ebp-0Ch]
0040D42C push edx
0040D42D lea eax,[ebp-8]
0040D430 push eax
0040D431 lea ecx,[ebp-4]
0040D434 push ecx
0040D435 push offset string "%x %x %x %x \n" (00422e80)
0040D43A call printf (0040d6c0)
0040D43F add esp,14h
探测 & 变量的类型
char a;
short* b;
int** c;
int x = &a;
int x = &b;
int x = &c;
以上代码全都无法编译成功
说明 使用了 &符号后 将会生成 &符号后类型的指针(加一个*)
C-lang
893
2 分钟 C语言14 指针类型
指针是C语言中的一种数据类型,
定义带 *类型的变量
char x; char* x;
short y; short* y;
int z; int* z;
float f; float* f;
double d; double* d;
Student st; Student* st;
总结:
linux
494
1 分钟 官方教程有问题
这里总结下,省的下次又不会配了
配置 ipv6 block

打开 https://console.online.net/en/network/ 创建子网

配置 仓储地址
编辑 sources.list
sudo vim /etc/apt/sources.list
在末尾增加dhcp6的源地址
CSharp
2159
5 分钟 上周又遇到了坑爹问题,具体表现为 服务端接口全部调用失败。
排查日志发现,有大量的 错误日志为
C-lang
363
1 分钟 结构体数组的定义
类型 变量名[常量表达式];
//定义结构体类型
struct stStudent
{
int Age;
int Level;
}
//定义结构体变量
struct stStudent st;
//定义结构体数组
struct stStudent arr[10];
//或者
stStudent arr[10];
结构体数组初始化
struct stStudent{
int Age;
int Level;
};
struct stStudent arr[5] = {{0,0},{1,1},{2,2},{3,3},{4,4}};
//或者
arr[0].Age=100;
arr[0].Level=100;
结构体成员的使用
格式 :
C-lang
810
2 分钟 #include
char x;
short y;
int check()
{
x =1;
y=2;
return 0;
}
int main(int argc, char* argv[])
{
check();
system("pause");
return 0;
}
//上述代码中 check 函数的反汇编
13: x =1;
00401038 C6 05 E2 55 42 00 01 mov byte ptr [x (004255e2)],1
14: y=2;
0040103F 66 C7 05 E0 55 42 00 mov word ptr [y (004255e0)],offset check+26h (00401046)
//下面将y的类型改为 int
#include
char x;
int y;
int check()
{
x =1;
y=2;
return 0;
}
int main(int argc, char* argv[])
{
check();
system("pause");
return 0;
}
//上述代码中 check 函数的反汇编
13: x =1;
00401038 C6 05 E4 55 42 00 01 mov byte ptr [x (004255e4)],1
14: y=2;
0040103F C7 05 E0 55 42 00 02 mov dword ptr [y (004255e0)],2
我们发现,x跟y都是全局变量,但是它们的地址却不不是连续的.
C-lang
603
2 分钟 思考:
当需要一个容器能够存储1个字节,你会怎么做? //char
当需要一个容器能够存储4个字节,你会怎么做? //int
当需要一个容器能够存储100个2个字节的数据,你会怎么做? //short arr[100]
C-lang
846
2 分钟 数组的定义
数组定义的格式:
数据类型 变量名[常亮]; //为什么不能使变量?
//因为在声明的时候 编译器需要知道数组的长度,分配相应大小的内存
数组的初始化
方式1:
linux
764
2 分钟 
众所周知,Ubuntu 上官方源的更新速度一直是慢得令人发指的,很多人不得不自己编译 nginx,非常麻烦。
C-lang
1133
3 分钟 switch语句的定义
语法
switch(表达式)
{
case 常亮表达式1:
语句;
break;
case 常亮表达式:
语句;
break;
case 常亮表达式:
语句;
break;
......
default:
语句;
break;
}
需要注意的点
- 表达式结束不能使浮点数
- case后的值不能一样
- case后的值必须是常量
break
:break
非常重要,当执行到一个分支后 如果没有break就会继续向下执行,遇到break才跳出switch语句default
语句与位置无关,但是当default写在其他条件的前面时。如果没有break;
,就会向下继续匹配
Switch语句与 if..else语句的区别:
- switch语句只能进行等值判断,而if..else可以进行区间判断
- switch语句的执行效率远远高于if..else 在分支条件比较多的情况下,这种趋势愈发明显
观察switch语句的反汇编,看看switch语句为啥效率高
C-lang
454
1 分钟 运算符与表达式
什么是运算符?什么是表达式?
int x,y;
x+y x-y x>y x==y x=y
表达式的结果
(x+y)*(x-y)
char => short => int => float => double
/*如果x和 y类型 不同,最终结果按照上面结果类型转换*/
表达式不论怎么复杂。最终只有一个结果
汇编/C-lang
1446
3 分钟 C语言数据类型
基本类型
整数类型
char、short、int、long
char 8BIT 1字节 0~0xFF
short 16BIT 2字节 0~0xFFFF
int 32BIT 4字节 0~0xFFFFFFFF
long 32BIT 4字节 0~0xFFFFFFFF
特别说明:
int 在16位计算机中与short宽度一样,在32位以上的计算机中与long相同
汇编/C-lang
1368
3 分钟 int x = 123; //补码
int float f = 123.4F; //IEEE编码
int i = "A"; //神马情况???
我们在代码中写入
python
951
2 分钟 今天的kimsufi 4C没抢到。不过这个垃圾网还不如oline的。就找了个脚本改改 部署方便些
C-lang
413
1 分钟 变量声明
变量类型 变量名;
变量类型 用来说明宽度是多大
int 4个字节
short 2个字节
char 1个字节
变量名的命名规则