11.4 晚自习 回顾第六届…的模拟练习

发布于 29 天前  37 次阅读


char ch = '\077'; // 八进制转义字符
只要是用转义字符来赋值字符变量,不管有没有加单引号,都是表示特殊意义,且表达式都是正确的,都是将其转换成对应的十进制,然后根据ASCII码表来进行赋值


char a[]='\0abc\012345'有几个字节?

\0,我们知道,字符结束符,第一个字节

a、b、c,自然是三个字节

遇到转义字符就难搞了,我咋知道什么时候停止转义,那些是转义字符,哪些又是普通的数字字符?

因为char以ASCII码形式存储字符,我们得先了解ASCII表

first of all,ASCII中的0~31为控制字符;32~126为打印字符;127为Delete(删除)命令

ASCII扩展字符(为了适应更多字符而存在)128~255,或者-128~-1,其中,-128对应128,依次递增对应。

所以,0~255的数字(十进制)就是有意义的(当然,也可以说成-128~255的数字)


我们再来回答这个问题

C 语言标准并不直接支持二进制转义序列,八进制转义序列可以包含最多三个八进制数字,与八进制转义序列不同,十六进制转义序列没有固定的最大数字个数,但通常建议使用两个数字来表示一个字节

八进制最开头的0包含在这个范围之内,所以这个题只能是\012,而不是\0123

所以你可以根据这个要求,在前面补0,来达到只读取并转义一个八位数的目的(极其重要)


同时,最不能忘记的是字符串结束时末尾的字符结束符\0,它必定占一个字节,所以共占9个字节,而不是8个(老六)



int arr[3][3] = {
    {1},      // 第一行,只有 arr[0][0] 被初始化为 1,其他元素 arr[0][1] 和 arr[0][2] 被初始化为 0
    {2, 2},   // 第二行,arr[1][0] 被初始化为 2,arr[1][1] 被初始化为 2,arr[1][2] 被初始化为 0
    {}        // 第三行,所有元素 arr[2][0]、arr[2][1] 和 arr[2][2] 被初始化为 0
};

当你声明并初始化一个数组时如果你只初始化了部分元素,未初始化的元素会被自动设置为零。这适用于静态存储期的数组(例如全局数组和静态局部数组)

正如上面的代码块,花括号里面的内层花括号应该有三个(对应二维数组的“行”),只要你进行了初始化操作,全部数组都会进行初始化

当然,在这里强调的是初始化操作,而不是赋值(如果赋值也是这样,那就太可怕了,haha)


double a[20] 这里a占多少个字节?

void f(double a[20])这里函数f的形参a占多少个字节?

这两个问题出得很好

double 类型通常占用 8 个字节。因此,数组 double a[20] 的内存占用等于元素个数×每个元素的字节数=20×8=160 字节

在 C 语言中,当你将一个数组作为函数参数时,实际上传递的是指向该数组首元素的指针,而不是整个数组

因此,形参 a 在函数 f 中并不占用整个数组的内存,而是占用一个指针的大小

这在32位系统中是4字节(我感觉我学的是基于32位系统的C,haha)

届ける言葉を今は育ててる
最后更新于 2024-11-04