在逻辑运算中,逻辑与(AND)运算的优先级高于逻辑或(OR)运算
即&&先算,然后才是 || 和位运算符挺像,都是 | 是最终boss
当然,逻辑非!肯定是先锋,毕竟是一元运算符
我最初就有个疑问,这个题目的int c=0; !c是什么意思?
你再好好想想,在编程里面什么是对,什么又是错
不是true和flase,而是0和非0!
只要是非0,你就是对,你就是正义!
所以,!c中的这个反骨仔!会输出0的值
遇上了字符串类型的数组(其实字符串就是以字符数组的形式存储的),在这里特意了解下这里的知识点
在C语言中,每个字符串都以空字符 \0
(即ASCII值为0)结束
// 定义字符数组并初始化
char str1[6] = "Hello"; // 包括末尾的空字符
这是最常用的字符数组定义和初始化格式
可以看到,这里并没有用到{ },而是直接使用了“ ”
但是你得注意的是,在这个例子中,数组大小为6,因为5个字符加上一个空字符 \0
,这也是字符数组的默认法则
在C99标准之后,可以直接将字符串赋值给字符数组,但必须在定义时初始化:
char str5 = "Hello"; // 这样定义和初始化
其实也就是你只有在定义的时候不必写上[ ]中间的6
int main() {
char sss[] = "abcde";//如果你要填,那也是6而不是5
printf("%s\n%c", sss, sss[0]); // 这里你不能加上[ ]
//在 printf 函数中,sss[] 是不合法的。正确的用法是直接使用 sss,因为 sss 本身就是指向数组的首元素的指针(现在没学,你只要知道就好了)
}
return 0;
这个拷贝存储的字符串直接使用就是整体,分开用就是单个字符
比如上面会输出abcde和a的值
my god 现在看这个题还是不懂。。。。
char s[]="\101\101xyz";
printf("%d",strlen(s));
chatgpt告诉我,\101 是一个八进制转义序列
我直接当场懵逼了,且听它是怎么分析的:
反斜杠(\
):
- 在C语言中,任何以反斜杠开头的字符序列被视为转义序列。反斜杠后面跟随的字符会被解析成特定的值
有效的八进制数字:八进制数字是由 0-7
组成的。在 \101
中,1
、0
和 1
都是有效的八进制数字。八进制转义序列可以包含一个到三个八进制数字,也就是说,\1
、\12
和 \123
都是有效的
- 形式:
\ooo
,其中ooo
是一到三位的八进制数字(0-7) - 例如,
\101
代表的是八进制101
,转换为十进制是65
,对应字符A
我们再来看看十六进制的转义序列
十六进制转义序列
- 形式:
\xhh
,其中hh
是一到两个的十六进制数字(0-9 和 A-F) - 例子:
\x41
对应十六进制41
,而41
在十进制中是65
,对应字符A
\x20
代表空格字符,因为20
是十进制32
. 二进制序列(无直接的转义序列)
- 在标准C语言中,没有直接的二进制转义序列。也就是说,你无法像使用八进制(
\ooo
)或十六进制(\xhh
)那样直接通过转义序列表示二进制数。 - 如果需要表示一个二进制值,你通常需要将其转换为十进制或十六进制。例如,要表示二进制
01000001
(对应字符A
),可以使用\x41
表示。
再来科普下,十进制数值并没有特定的转义序列。你可以直接使用十进制数字,而不需要加反斜杠(\
)
char a = 65; // a 的值是字符 'A'
如上代码,你并不需要额外加上反斜杠
好了,现在你依旧很懵逼,还是不会啊!
你知道了八进制转义字符,那么你应该它换成十进制,然后根据ASCII表将其转化为对应值
前面已经说过,ASCII码其实就是十进制形式
如\101,就是十进制的65,所以它对应的字符是 ASCII 码 65
,即字母 A
OK,再来分析strlen函数,我现在在那个专门收录函数的文章上写了
很傻逼的是,我遇见了\\101,\101已经知道,但是前面的\可和这个没关系啊!
这其实tm就是单纯的、单独的反斜杠,是一个字符串。。。。
Comments NOTHING