C语音___复习一下

 

多个文件的时候,注意要给自己的函数加上static ,来限定仅仅是本文件内可以使用的函数。
静态全局也是同样的:仅仅在本文件中使用有效。
-----------------------第一天的C: C89 C99标准

1. int a;scanf("%d",&a); char arry[a];//unix下C是支持动态数组的。
2.   gcc编译器需要我们加上空白行,以免在链接其他文件的时候和main文件的语句重叠,出错
3.  #预处理语句会在编译之前执行展开。     \续行符号    $,_可以作为变量名     系统里面的变量名之所以有__很多个下划线是为了防止和我们定义的变量相冲突。
4. 变量释放了,系统仅仅是把该空间标记为“空闲”状态,里面的数据是不会晴空的,所以每定义一个变量都会存在垃圾值。
5. unix下的int 是4个字节的。与long int 一致 与float 一致。但还是float表示的数据大。
6.  A--Z: 65--90  a--z : 97---122   '0'---'9': 48--57 \0: 0
7. sizeof()运算符仅仅只是作空间的探测,并不会执行其中的运算。直接无视你的存在。
8.     '\0'== " " , 游离:表示存在中文符号。     lf llf f要对数据铭感,比如int的取值范围。

-------------第二天的C:

1.所有的地址都是常量,内存里面已经固定好了有多少地址。
2. string之所以要\0结束,是因为他只有开头,表示不了结束,所以必须要来个可以结束的标志,这样就可以让编译器不会一直往后猛找了,不会结束。int 4 double 8 char 1 string ? so \0 end .   "abc"==&"abc":true
3.  utf-8 中文3个字节,gb2312和gbk big5:中文占2个字节(国际,中国大陆,香港,台湾):英文和数字都统一占1个字节。
4.  栈空间的内存分配是:想定义后分配。倒叙:先进后出,必须有顺序。 堆空间:手工申请,手工释放,逻辑表现出有序,无需大块数据空间连续,空间存储是零散的。
5 . 函数的返回值,运算符运算出来的结果:系统都会先将结果保存到临时空间中去,然后再从临时空间中取值进行后续的运算操作。](所以复合运算效率高是减少了这一步)
6.  编译时候先分配空间,待所有变量空间分配完成了之后,再来执行,运行代码!
7 . time_t size_t off_t

--------------------第三天的C:

1. 为什么++++c会出错,因为++c执行的操作会到临时变量中去,++(临时变量),:额,这个必须错:临时变量怎么给自己自争阿?
2. 函数的行参调用都是从右自左的调用,这于栈空间的先进后出有关。
3. 多个 参数中都有对同一个变量的操作,那么系统会自动优化。  加上 volatile (要求寄存器和内存值必须同步)
4. 改变某个变量的位1 ->0 ,0 -> 1 .需要我们借助中间数,来进行位运算。
5. 1个字节:8位全1:255    2个字节16位全1:65535/2=3万    4个字节32位全满:42亿/2=21+        float:7位有效数,6位小数  double :16为有效数,15位小数
6. scanf()具有缓存,返回的是有效接受个数,遇到回车结束,printf()也具有缓存,返回的是有效字符的长度,遇到回车结束。\r表示回到当前行首。
  fflush(stdin)  fflush(stdout);  while(getchar()!='\0'); cin.ignore(1000,'\0');
7.  ^异或具有累加和还原的效果。   a=a^b;b=a^b;a=a^b;     ************************8
8. usleep()微妙  sleep()秒    float double 通过这种方式来达到比较的效果:d-f>=0.0000001 d-f<=0.0000001  允许误差的范围是多少。
9.  小的数据在转换成大的数据时,会产生垃圾值;比如:float f===> double 时,会多出空间,这些空间中都是垃圾值,所以不具备准确性。
10.  goto的标记后不要有定义语句,如果有应该在之前加上;     tag: ; int a;goto tag;
11. memset(str1,'\0',10)  memcpy(str1,str2,sizeof(str2));   *********************sizeof()是探测不出动态大小,只能作静态的,死的探测。************所得结果是1咯

----------------第四天的C:

1. file.close()只有关闭了,文件才写入到磁盘中去,因为没有close则东东,数据都是在内存中。
2.   全局的变量,可以声明多次,不算错!   栈空间具有全局作用域。
3. unix 下的动态调试工具:gdb a.out   r运行    bt跟踪    q退出(重复释放同一个指针指向的空间会段错误)
4. fgets(str3,sizeof(str3),stdin):把stdin作为一个文件  if(str[end-2]!='\n'&& str[end-2]!='\0')while(getchar()!='\n');
  fgets()用之前,清务必把str3的空间清0,方可景行判断。
5.   指针无法探测出其所指空间总共大小,而数组名可以。  windows下命令行中的字符最多259个。
6.  void *p 默认1个字节  sizeof(p)
7.  strstr()  :查找字符串,返回其下标值   char* pp=strstr(str1,"cc"); if(NULL!=pp){...}
    strcpy() strncpy(str1,str2,min(sizeof(s1)-1-strlen(s2),strlen(s2))) strcat()自动清0的去追加 strncat() put() putchar()
    sscanf(html,"<htl> %s <htl> %d <name> ",str,num)     sprintf(strNew,"%s and %d is a good friend!",str,num);
C++  istringstream iss(str) ,ostringstream oss; iss>> >>>> >> ; oss >> >> > ;cout<<oss.str()<<endl;
          find(str1); length()  ;substr();

--------------------------第5天的C:
1.  可变参数的实现: stdarg.h   va_list va_start(list,size)  va_arg(list,double) va_endl(list);
2.重点: static 函数,仅限制于本文件的使用。(解决了很多项目经历的难题。)
3.__LINE__   __FILE__   __DATE__  __TIME__  __STDC__ 
       #define G 123     #undef G  #define s #else #endif #ifndef xx  #define xx  #endif

---------------------------第6天的C:(指针)
1. 初始给NULL,防止野指针。    不能表示空间的整体占用,数组可以。     堆空间分配默认是void * .  int* a,b;  *仅仅对a起作用,仅一次作用。
2. calloc(4,3) 比malloc 多了一步初始化  ,同c++ :bzero(str,4)用于初始化0   memset(str,'\0',sizeof(str));
3.   地址运算具有放大因子和缩小因子,所以不用担心。     *p++  :同级别的运算符号,是从从右至左来运算的。
4.  数组名不可以自增运算,因为不是变量,指针变量才可以。

****************************************
5.  数组指针:int (*p)[3];指向数组的指针,是个指针。(*p可以表示一个一维数组) 所yi [][] 是二维数组。
    指针数组: int *p[3] ; 每个元素存储的是指针变量的数组
    指针函数: 是个函数,返回指针类型罢了。 int *p(int,float);//返回的空间应该是在堆的或者全局的空间中。     这是声明方式
    函数指针: 是个指针, 指向函数首地址: int(*P)(int,float);//p=abc or p=&abc; 
    多极指针: int **p ; int *p2 p=&2;

********************************************
6. atoi()  atof() ..... c_str();  加上static 的全局变量仅仅在本文件中有效果。

----------------------------第7天的C:(结构,内存对其,位段)

1.  C不支持struct内部存在函数成员,而C++则允许,所以同class一样贝。 C定义struct变量,要加上struct student s1的修饰,而c++则无需加上。
2.   不能用数组给另一个数组赋值,因为都是常量,怎么赋值?!
3.   内存对齐:加快处理速度,但是耗了内存。  1。 以类型最大的作为对齐单位,但是32位的机器,最多4个字节,超过了则以4个字节为对齐单位。2。连续数据类型内部不进行对齐  (同类型情况下)3。 能拼凑的,会按照首地址落在偶数位的原则来对齐。 4结构体的长度,一定是对齐单位的整数倍
4. 不同的平台的内存对齐具有差异,所以我们要去了解这些差异,才能配出跨平台的对齐方式。        位段: char ch:1;  int in:22;只有整形才可以作位段的:操作。


----------------------------第8天的C:(文件操作) 

1.
C :
   FILE* file=fopen("","rb+");//r w a rb wb ab r+(更新,删除) w+ a+ rb+ wb+ ab+
   if(NULL==file)return;
     fputc(ch,file);
   rewind(file);//回到开头位置   fseek();  ftell()  feof()   SEEK_SET SEEK_CUR SEEK_END fseek(file,-sizeof(s),);
   while((ch=fgetc(file))!=EOF)putchar(ch);
   if(0!=fclose(file))"无法关闭";  
C++:
 fstream f("abc.tst",ios::app|ios::in|ios::out);
 if(!f)return;
 f.read((char*)&s1,sizeof(s1));
 f.seekg(-3*(off_t)sizeof(s),ios::cur);//seekp()  ios::beg  ios::end
 f.wirte();
 while(!f.eof()){read().....}
 f.close();
      
  

你可能感兴趣的:(ios,c,struct,File,float)