3.20 C++学习总结

1.转义字符的考察
printf("%d",strlen("\t"\065\xff\n"));输出结果是5为什么?
结果是5没错:\t,",\065,\xff,\n共5个。
\t——水平制表符,ASCII码值9;
“——表示一个双引号,ASCII码值34;
\065——用八进制表示的ASCII码值53,是字符’5’;
\xff——用十六进制表示的ASCII码值255,是扩展ASCII码的最后一个符号,标准平台下无输出;
\n——表示一个回车换行符,ASCII码值10。
以上每个都只有一个字节,所以共5个字节。
2.strcat函数和strcpy函数
strcat函数:将两个char类型连接。
char d[20]=“GoldenGlobal”; char *s=“View”; strcat(d,s);
*结果放在d中
strcpy函数:原型声明:char strcpy(char dest, const char src);
头文件:#include <string.h> 和 #include <stdio.h>

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针
example:
#include"stdio.h”
#include"string.h"
#include"stdafx.h"
int main()
{
char p1[10] = “abcd”, *p2, str[10] = “xyz”;

p2 = “ABCD”;
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf(" %s", str);
system(“pause”);
return 0;
}

输出结果:xycdBCD
其中str+2,这个是把数组当成指针用。str指向的是数组里的第一个元素,str+2指向数组里第三个元素,也就是字母z;p1+2、p2+1一样。
3.下面程序段的输出结果是
char *p1 = ”123”, *p2 = ”ABC”, str[50] = “xyz”; strcpy(str + 2, strcat(p1, p2)); printf(“%s\n”, str);
答案:错误。
p1和p2指向常量字符串,在常量区,不能对其进行操作。
改为数组即可,但数组初始化的时候在数组长度上加1,因为字符串末尾默认的有一个\0.
改为字符串后结果同2.
4.C++中,容器是一种标准类模板, C++标准类模板就是STL(Standard Template Library)
5.下面for循环执行的次数
for(m=0, n = -1; n=0;m++,n++)
n++;
该循环体一次也不执行,循环判断条件是一个赋值语句,在c中0为假,非0为真。
6堆和栈的区别:
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向,对于栈来讲,生长放向是向下的,也就是向着内存地址减小的方向。

4G内存空间中,0-3G是用户空间,3-4是系统空间。

7.volatile变量
volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人;

精确地说就是,编译器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1)并行设备的硬件寄存器(如:状态寄存器)
2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3)多线程应用中被几个任务共享的变量

当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致
举一个不太准确的例子:
发薪资时,会计每次都把员工叫来登记他们的银行卡号;一次会计为了省事,没有即时登记,用了以前登记的银行卡号;刚好一个员工的银行卡丢了,已挂失该银行卡号;从而造成该员工领不到工资
员工 -- 原始变量地址
银行卡号 -- 原始变量在寄存器的备份
⒉ 在什么情况下会出现
1)并行设备的硬件寄存器
2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3)多线程应用中被几个任务共享的变量
补充:volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人;
“易变”是因为外在因素引起的,像多线程,中断等,并不是因为用volatile修饰了的变量就是“易变”了,假如没有外因,即使用volatile定义,它也不会变化;
而用volatile定义之后,其实这个变量就不会因外因而变化了,可以放心使用了; 大家看看前面那种解释(易变的)是不是在误导人
当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。

8.scanf用于输入整数时,当遇到非数字字符结束,此时,非数字字符串将存入键盘缓冲区,如果接着读入字符,将从键盘缓冲区读入该字符。
scanf(“%d%c%d%c”,&a,&b,&c,&d),实际的输入形式可以为10A20B。

9.左值与右值
左值与右值在C/C++中表示位于赋值运算符两侧的两个值,赋值号左边的就叫左值(left-value),右边的就叫右值(right-value)。 比如:(1) int b = 3;(2) int a = b;第(2)行代码,a为左值,b为右值。不过现在的左值与右值的含义有了更深层次的含义:
L-value中的L指的是Location,表示可寻址。Avalue (computer science)that has an address.
R-value中的R指的是Read,表示可读。in computer science, a value that does not have an address in a computer language.

10.clone 和fork的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值