C & C++ 基础训练集合 第一季

编程基础训练
问题: 关于内存开辟的相关函数的理解。
解答:This part covers the dynamic allocations. The data in memory can only be regarded as byte, the arguments attached in the function  indicates that the size of the memory. We can make a distinguish from each function's name, void *realloc(void *pt,size_t) means 重新分配, void *malloc(size_t )( argument is the number of bytes in the allocated memory block) 可以认为m为manual 也就是手动分配的意思,而calloc就是指定count的内容来allocate a specific memory block. Note that the above method may be not true , which is just used to remember the differences between these functions. 这里可以做这样的一个要求,因为这三种函数malloc、calloc、realloc相当于从内存中借来的内容,所以你需要将你借来的做一个标志,以至于后面不要忘记归还,所以在用这三个函数的时候应该添加一个提醒的注视来提示自己不要忘记去释放这段借来的内存。 其实,这些函数什么时候会使用呢,我们这个地方可以利用下面件的几个问题联合考虑,假如你需要引用一个结构体,你有这个结构体的指针,你需要clone一个这样的结构体出来,这个时候你就需要将利用到这个calloc或者malloc相关的函数,但是别忘了要free这些空间。

问题: why did the "typedef" frequently use in our program?
解答:According to concept described in specification,

问题: what on earth namespace is ?
解答:命名空间主要是解决名称冲突的问题,命名空间常用的形式:
1 在某一个cpp文件的包含文件下一行写using namespace XXX, 这个意思也就是说在整个这个函数内都使用命名空间为XXX里面的函数。 

问题:In C or C++ , if u have apply for a part of memory by calloc(), free() is dispensable at the end of the life-cycle of the variable.
解答:

问题:The symbol of include file on the top of a cpp or c file which illustrate where the files locate.
解答:In C/C++ files , #include <**.h> is different from the #include "**.h",<> means the original path locate , "" indicate the specific project path, in which you can find the header files. I have a better idea of the ambiguous , symbol brackets indicates the function is declared and accomplished in the library whereas the quotation marks illustrates you can find the function in the files included in your project.

问题:The address of the function and the advantage of the mechanism.
解答: 函数的地址,因为函数也是需要放置到内存里面,所以函数的地址代表的是这个函数所占据的内存块的地址

问题: Are pthread_create and other related functions standard C functions and how can i use ?
解答:


对于不同类型所占的字节数在通信的过程中非常重要,下面就这些不同类型的数所占的字节数做一个总结。
     Signed and unsigned can' t yet affect the typical size whereas short and long would determine the basic typical size , which can be regarded as modifiers. char is the same as the size of byte.
     int有很多的qualifier,但是只有short和long会影响int的所占的字节数,short与long这两个关键字就可以理解为int长度的影响量,short可以理解为int的较少占的字节数2个byte,long可以理解为int的占用较多的字节数4个byte,而signed和unsigned不会影响int所占的字节数,因为他们仅仅是影响int所占的字节数的最高的bit位的意义。
    这里需要特殊说明一点的就是printf的格式中,这种修饰符同样可以用来修饰输出符,例如%d,是用来输出decimal number,按照之前所提到的内容就有%ld输入的是long int,%lu代表的输出就是long unsigned int,%hu 代表的输出就是short unsigned int.(这个地方有一点需要理解的就是h应该是short,s已经被string用了,所以用h代表)。


在C_plusplus中定义字符数组的时候,常常不确定是应该如何写定义
I 如何定义char数组,定义的时候是否需要初始化数组的长度。
char数组可以表示成字符串,也可以是一些字符构成的数据,前者与后者的区别是char数组的最后是否有字符串的结束标志符。而如果是字符组成的数据就没有这个标示符,所以在定义char数组的时候必须要初始化,这个在定义其他类型数组的时候也需要注意,
问题: As for the memcmp(const void *,const void *,size_t) along with related functions , How can I distinguish one from the group?
解答:Actually, we can regard all the memory data as a char which have no sign or other information. , the compared value is the sum of the specified count characters.其实,这跟strcmp的原理是一样的,不一样的是strcmp(char *,char*)根据字符串的结束符"\0"来设定结尾。 第二个需要讨论的地方就是这些arguments的modifier,memcmp采用的是destination与source pointer都是const的,我认为这个地方是为了一个保护数据的角度考虑的,设想,如果需要操作的的数据源指针,在程序中发生变化,那么我可以认为在处理内存的时候,这个指针会破坏其他的数据,同时,在这个函数要确保正确的前提下,肯定要有一个标称的指针所以这个地方只要符合这种情况的都要加const,如memcpy(void * to,const void *,size_t),memmov(void *, const void *,size_t),strcpy

问题:  When and How to use emun in the C code ?
解答:

问题:What is the type of the specific pointer ?
解答:其实对于指针,我一直有这样的一种疑惑,对于一个指针前面的qualifier,怎样理解的问题,前面有一个问题是关于函数回调中,我们常常是将函数的地址放到回调函数的arguments中,其实这个地方的const与qualifier 有异曲同工之处, 其实就拿强制转换来说,我先从简单的例子说起
      int ret = 10;
      long lret = (long) ret ;
     这个例子非常易懂,如果把这个例子有一个变化也就是
      int ret = 10;
      int * ptr = & ret ;
      其实这个问题可以这样来理解,我认为你申明了一个变量是某一个类型的,然后你用*,取出地址内部的数据,然后再会是用qualifier来进行describe这个量,所以我们通常用中文描述是指向整形的指针,通过这句话就可以很好的理解指针定义的意义,同样的道理,对于指向函数的指针可以被理解为指向这个函数的指针,我们应该用无类型来interpreter void 这个modifier,对于空的解释会让人引起误会。

问题:const *与* const的区别 ?
解答: 其实这个顺序的问题就是const修饰哪个量的问题,放在* 后面很明显他是修饰变量的,如 int * const ptr ,这个 
对于类似指针可以这样看待对应的,凡是有*p_VariableName这样的就可以认为这个p_VariableName 是指针,* p_VariableName 相当于一个实例,例如像JNI中JNINativeInterface的定义就说明他的指针是常量。

问题:Thinking in the function argument .
解答:As for the function arguments, two commonly approach take its difference to its extreme.The pointer means you can change the value in the scope of your function after the process leave the function, the variable means you can only modify the value in the function which has no effect on others.

问题: Why we should use static in the android system?
解答:

问题:关于sizeof的相关特性理解
解答:sizeof可以求出指针或者实例的字节数,但是对于指针需要特殊说明一下。sizeof(指针)的时候分为两种情况,一种是指针变量,另一种是数组的地址,这两个不同的情况所检测出的结果是不同的。
    这个地方我理解数组地址(指针)为一个链表,sizeof则是去查找这个链表的结束地方,然后计算整个链表的字节数,这样就能解释指针的大小为地址总线的大小。但是,对于指针变量我理解为只有一个地址,然后是空,所以他的大小就应该是系统地址总线的大小。
    注意sizeof(*)的返回值是long unsigned int, 在输出到设备端的时候要特别注意输出的格式。
   
问题:对于输入输出设备的理解
解答:对于输入输出设备有很多种,比较基础的就是终端或者文件,所以一般在终端上的输入就是stand input/output,还有就是File,当system读到一个file时,需要将这个内容读进内存,然后在内存中操作这个文件,所以,File通常用的是指针,如果用实例的话,内存开销会非常的大,其实fopen相当于在内存中开辟了一个内存块来存放这个文件,就像calloc函数一样,申请的内存在用完后需要进行释放,同时,你所修改的内容都仅停留在内存中,需要将修改的内容写进磁盘里面,就需要进行fclose这样的函数来进行操作。所以一定要执行fclose在操作完成以后。feof可以理解为去判断这个内存块,我理解为链表了,是否到了链表的末尾,feof我理解就是这样的情况,前缀f代表的是file类型的指针,而eof代表的是文件的末尾,然而,这里需要注意一个问题是EOF这是一个macro,它的情况类似于字符串的\0,这个值本身是一个字符,只不过是它代表的是字符串的结束。此处是同理。所以要直到这个文件加载到内存中的结束与否应该用feof(*).

问题:Java中的IOException的作用是什么?
解答:

问题:Linux下的open close相关函数的使用比较?
解答:

问题:
解答:联合体就像是定义一块内存,这块内存是由很多的不同类型的变量来公用的内存区域。这样做的目的是利用这种公用的特性能够拓展出很多不同的函数操作,这种操作可以通过操作联合体内的那部分内存块来操作这个数。这个函数主要是用来将某些没有直接支持的内容的函数,利用这种拓展性来增加性能。 File指针可以理解为将某一个文件读到内存中,file是这个内存块的地址,

fclose函数就相当于取消这个文件指针以及释放缓存里面的内容。


问题: 操作符的重构

解答:操作符重载的主要目的是拓展类的可塑性,重构操作符就类似函数一样,可以有参数也可以是无参数,但是形式上必须要与函数的写法保持一致。其实符号重载可以与函数重载的理解相似,他就类似于一个把这个符号的功能做一个变化而已


问题:模板的作用是什么

解答:


问题:构造函数中初始化类中部分变量在构造函数之后:后赋值,这样做的理由是什么?

解答:


问题:const_cast<>()的作用是强制类型转换。为什么不直接在指针前面进行转化,还需要用const_cast<>()

解答:


问题:定义数组的时候数组前面的类型表征了什么量

解答:数组前面的类型说明了数组内部定义的数据的类型,如果是指针类型,那么数组内部就是指针类型


问题:在函数的申明后面加上const的意义是什么(就是在函数申明的分号之前加上const)

解答:


问题:C语言中int的存储形式,高位在前还是低位在前。

解答:


问题: 为什么struct新建的指针删除时出现错误

解答:


问题:为什么结构体的定义可以通过{0}这样进行

解答:


问题:C语言的标准错误输出是什么

解答:


问题:

解答:


问题:

解答:


问题:

解答:


29 文件设备输入输出相关函数的理解

fseek(FILE *,int , int)

ftell(FILE *)

assert 在程序中经常用于规范化代码的假设性验证,通过assert.h头文件中的内容,发现了以下的一些问题

undef是什么意思,如何在代码中使用。



类型转换的转换顺序在代码的使用中常常用到,在程序该如何处理子类与基类的关系。




MFC中有很多的宏定义,那么这些宏如何使用是否只能够在window platform上使用呢

I DECLARE_DYNAMIC()这个宏的作用是什么,是否局限于windows platform,在什么情况下使用?

II 


Appendix :
1 The Complete Reference C fourth Edition
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值