关于C++/C的一些知识点整理

1.运算数据必须是整形数的是%。

2.C++标识符:1 只能含字母、数字、下划线   2 第一个字符不能是下划线 3 不能是已定关键字,如new,但newabc可以

3. 

         p1、p2都是指针,*p1=“123”与*p2=“ABC”都被分配到了文字常量区,大小是不可变的,而strcat的第一个变量必须是可变的,程序出错

4.

       此程序的输出结果为   stra    tra    ra   。p++ 为先输出再加1(++p为先自加1,再输出)。

5.判断双精度浮点数为零 if(abs(f)<=1e-15);    (double)

   判断单精度浮点数为零  if (abs(f)<=1e-6);  (float)

6.关于fork()

 例题1:

   

扫描二维码关注公众号,回复: 2466286 查看本文章

      答案为4 。

       fork()函数会把它所在语句以后的语句复制到一个子进程里,单独执行。
       如果printf函数最后没有"\n",则输出缓冲区不会被立即清空,而fork函数会把输出缓冲区里的内容也都复制到子进程里。
所以,父进程和子进程各输出2个Hello,共4个。
如果第一个printf("Hello");写成printf("Hello\n");,则只会输出3个Hello,父进程2个,子进程1个。

例题2:

        答案为14 。(本题有 \n )

解题过程:

例题3:

         答案为 8 。

printf(“-”)把“-”放在了缓存中,并没有真正的输出,在fork的时候,缓存被复制了子进程空间,所以,就多了2个,就成了8个。 

如果为printf(“ - \n ”)则为 6 。

7.内存对齐原则

struct/class/union内存对齐原则有四个:

1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon。

2).结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部"最宽基本类型成员"的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)。

3).收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的"最宽基本类型成员"的整数倍.不足的要补齐.(基本类型不包括struct/class/uinon)。

4).sizeof(union),以结构里面size最大元素为union的size,因为在某一时刻,union只有一个成员真正存储于该地址。

例题1:

             答案:5+1+2+8+4=20

例题2:

               答案:1+3+4+1+3=12

例题3:

              答案: 1+1+2+4=8

(class数据成员放内存的时候不是能放多少放多少,而是等下一个内存块过来)

猜你喜欢

转载自blog.csdn.net/mmmmmmyy/article/details/81119497