文章目录

茶屋Teahouse

Every time you lie my place

左值与右值 有更新!

左值与右值? 左值(L-value)与右值(R-value),二者之间的区别是什么? 左值与右值 01 这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与C语言严格吻合。 02 左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。 这样的解释有些脱下裤子放屁的意思,通过名称我们也能得出左值和右值的意思,那么应该出现在赋值符号左边的东西是什么呢? 03 1. a = b + 1; 2. b + 1 = a; 在语句1中,a是一个左值,因为它标识了一个可以存储结果值的地点;b + 1是个右值,因为它指定了一个值。 那么,能像语句2一样,互换左右值的位置吗? 原先用作左值的a此时也可以作为右值,因为每个位置都包含一个值。然而,b + 1无法作为一个左值,因为它并未标识一个特定的位置。因此,语句2是非法的。 04 int a = 5; ++(a++); 如果尝试执行此段代码,则会出现如下报错 main.c:4:2: error: expression is not assignable ++(a++); ^ ~~~~~ 1 error ....

Linux反引号 有更新!

0x00 反引号是什么 反引号(` `),反引号在键盘Esc按键下,在中文模式时它是·,只有切换到英文模式才能正确输入反引号。 0x01 在Linux中反引号有什么作用? 单引号 在linux中,单引号所包含的内容只代表纯文本。 不论单引号内包含的内容是什么,只要文本在单引号内,那么就只会作为字符串被处理,并且忽略所有的命令与特殊字符。 双引号 双引号与单引号的不同之处在于,双引号会解析特殊字符,如果想要忽略特殊字符,那么需要用到 \ 转义字符。 双引号不会解析命令,只是在单引号的基础上增添识别特殊符号的功能。 反引号 反引号和单引号与双引号则完全不同,后两者都是括号内的字符当作字符串处理,而反引号则处理命令。 反引号在将括号内的命令处理完毕之后,会将返回的信息传给bash,再次执行 文件test.txt的内容为: /etc/passwd /etc/shadow echo `cat test.txt` bash会首先解析反引号里的内容,也就是cat test.txt。 /etc/passwd /etc/shadow 在命令执行完毕后,会将返回内容作为输入重新传递到bash中....

linux的快捷方式-ln 有更新!

命令介绍 命令名称:ln 命令原型:link 命令所在路径:/bin/ln 执行权限:所有用户 功能:生成链接文件 区别 软连接 以路径的形式存在,类似Windows中的快捷方式 可以跨文件系统,而硬链接不行 权限以777(rwxrwxrwx)的形式存在 可以对目录进行链接 允许对一个不存在文件进行链接 硬链接 以文件副本的形式存在,不占用实际空间 与cp -p类似创建链接文件,并且链接文件与原文件同步更新 无法跨文件系统进行创建硬链接文件 只能对文件创建硬链接 示例 软链接 ln -s [原文件] [链接文件] 对 /tmp/test.txt 文件创建软连接 test.soft 一、 ln -s /tmp/test.txt test.soft 二、 cd /tmp ln -s test.txt test.soft 在创建软链接文件时,一定要将原文件的路径键入全,因为软链接文件是靠路径寻找原文件 test.soft 与 test.soft2 虽然最后指向的文件都是 test.txt ,但不同之处就在于 test.soft 不论移动到哪个文件夹哪个文件系统,它都指向 /t....

linux权限管理

命令介绍 命令名称:chmod 命令原型:change mode 命令所在路径:/bin/chmod 执行权限:系统管理员及文件所有者 功能:更改文件或目录访问权限 权限 文件的权限可以分为3种: r : read 读取权限 当作用于文件时,r就代表被读取的权限;但如果read权限作用于文件夹就变成了读取文件夹内的内容了,主要是浏览目录的权限。 w : write 写入权限 当write权限作用于文件和文件夹也有着不同的反应,当文件没有w权限时,此文件只是一个只读文件,此时文件只能读取不能写入;当为文件夹时,如果没有w权限,这个文件就只能看到里面的文件,但是不能对此文件夹里的文件进行修改、增加、删除的权限。 x : excute 执行权限 代表文件的可执行权限,比如命令,如果没有x权限它就失去了执行的权限,就会发生没有权限的问题。但它如果是一个文件夹,就代表能否进入文件夹的权限。 linux的权限有这三种类型,并且针对不同的用户也有着不同的权限。如上图所示,分别是 所有者(u user) 所属组(g group) 其他人(o other) 基本通过字面....

c语言与动态内存 有更新!

前言 在C语言中,除了获取变量的指针这种规矩的内存空间,我们还可以通过函数去申请指定大小的内存空间 动态 malloc malloc可以申请一块任意尺寸的空间,因为经常一段空间是连续的 #include <stdio.h> #include <stdlib.h> int main(void) { int *ptr = NULL; ptr = (int *) malloc(sizeof(int)); // malloc() 返回一个void *类型指针 if (ptr == NULL) { printf("获取内存失败"); exit(0); } *ptr = 4; printf("*ptr = %d\n", *ptr); return 0; } Output: *ptr = 4 解析 void * malloc(size_t size) 声明一个空指针 使用malloc函数申请一个连续空间,尺寸为int类型的长度,并将指针类型转换为int类型的指针 判断是否申请成功,若成功则继续,若不成功则退出 为ptr赋值 输出 可以在 (int *) malloc(s....

更好的使用结构体 有更新!

结构体与指针 在C语言中,指针可以指向万物,自然也少不了结构体。 使用结构体指针,有4点好处: 就像指向数组的指针比数组本身更容易操控一样,指向结构的指针通常比结构本身更容易操控 在早期的C中,结构不能作为参数传递给函数,但是可以传递指向结构的指针 即使能传递一个结构,传递指针通常更有效率 一些用于表示数据的结构中包含指向其他结构的指针 根据这4点好处,证明学习结构体指针的重要性 // Book结构体沿用上面 int main(void) { struct Book books[2] = { {"C Primer Plus", "Stephen Prata", 59.4}, {"黑客与画家", "Paul Graham", 49.00} }; struct Book * book1; // 这是一个指向结构的指针 book1 = &books[0]; // 告诉编译器指针指向何处:结构数组第一个结构 printf("[book1] title = %s, author = %s, price = %f\n", book1->title, book1->autho....