C++蜗牛

C++蜗牛



1:windows静态连接
#include  “mysock.h”             //    头文件
#pragma  comment (lib,  “myxock.lib”)  对应的静态库库文件

作用:实现windows静态库的手动连接


2: char s [ 1024] = { 0 };

作用:将内容清空


3:数据类型的封装
用法 int  InitHardEnv(void **handle);
     void*指针作为左值用于“接收”任意类型的指针
     void*指针作为右值赋值给其它指针时需要强制类型转换
     典型的如内存操作函数memcpy和memset的函数原型分别为
    void * memcpy(void *dest, const void *src, size_t len);

    void * memset ( void * buffer, int c, size_t num );  


4:内存四区分析
 
5:const int* c   c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)
   Int* const d d是常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
Const int* const e e是一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)
C++编译器对const常量的处理
当碰见常量声明时,在符号表中放入常量 =问题:那有如何解释取地址
编译过程中若发现使用常量则直接以符号表中的值替换
编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)
结论:
指针和指针所指向的内存空间是两个不同的概念,使用内存四区图来进行理解

看const的作用,看const 是修饰×的左边还是右边,左边就是指针变量可以改(可以使用a=a+1,a为指针),但是该指针所指向的内存块不可以改变内容;右边就是指针变量不能改,但是该指针所指向的内存块可以改变内容。


6:引用
 
引用是地址,引用是常量,引用所占的空间大小与指针相同,使用常指针实现
Const & 相当于const int* const e;

普通引用相当于int* const e1;


7: 函数默认参数的规则
只有参数列表后面部分的参数才可以提供默认参数值

一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值


8:函数重载
   函数返回值不能作为函数重载的依据
   由函数名和参数列表决定的
重载函数在本质上是相互独立的不同函数(静态链编)
当函数默认参数遇上函数重载
int func(int a, int b, int c = 0);int func(int a, int b);
c = func(1, 2)执行出错,存在二义性,编译通不过
重载和函数指针结合
当使用重载函数名对函数指针进行赋值时
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型
int func(int x) // int(int a)
{
return x;
}


int func(int a, int b)
{
return a + b;
}


int func(const char* s)
{
return strlen(s);
}


typedef int(*PFUNC)(int a); // int(int a)


int main(int argc, char *argv[])
{
int c = 0;
PFUNC p = func;
c = p(1);
printf("c = %d\n", c);
printf("Press enter to continue ...");
getchar();
return 0;

}


9:


10:三目运算符

C语言中其返回的是变量的值,在c++中返回的是变量本身,也就是说c中不能做左值,c++中能做左值。(注意,如果可能返回的值中有一个是常量,那么就不能作为左值使用)


11:c++中const常量与宏定义的不同

Const常量是由编译器处理的,提供类型检查和作用域检查;宏定义由预处理器处理,单纯的文本替换。


12:copy构造函数(赋值构造函数)

赋值构造函数和=操作是两个不同的概念。
当我们没有编写copy构造函数(赋值构造函数)的时候,c++编译器会默认给我们提供一个copy构造函数 执行的是浅copy
深拷贝和浅拷贝


13:c++/c中获取char【】数组的字符串长度

Strlen(const char*);


14:c++/c中获取数据类型所占字节大小

Sizeof (type);


15:二级指针的内存模型
二级指针的第一种内存模型
                Char * Accary [ ] = { “aaaaaa”,   ”bbbbbb”,   ”ccccccc” };
         


//接口形参使用方式
Int printfarr(char **ArrayStr, int iNUm)
{
    For (i =0; i<iNUm; i++)
     {


  Printf(“%s  \n”, ArrayStr[i]);
     }
}
//调用方式
Printfarr(Accary ,  3);


二级指针的第二种内存模型
            
 Char  Array[10][30] = {“aaaa”, “bbbb”, “cccccc”,};


// 接口形参使用方式
Void abc(char Arrary[30], 4 )
{
   For (i=0; i<4; i++)
   {
      Printf(“%s  \n”,Accary[i]);
   }
}
//调用方式
Printfarr(Array ,  3);


二级指针的第三钟内存模型
 char **real = (char **)malloc(3*sizeof(char *));
        for (int i=0; i<3; i++)
        {
                real[i] = (char *)malloc(30*sizeof(char));
        }


        sprintf(real[0],"dbsiudaudhakdhjhba");
        sprintf(real[1],"b");
        printf("%s \n", real[1]);
//接口形参使用方式
Int printfarr(char **ArrayStr, int iNUm)
{
    For (i =0; i<iNUm; i++)
     {


  Printf(“%s  \n”, ArrayStr[i]);
     }
}
//调用方式
Printfarr(Accary ,  3);




形参写法的引申:
Void str(char  abc[30]);
void str(char abc[  ]);   一维数组做形参,退化为指针
void str(char abc);手工加 * ,手工完成编译器任务
//针对第二种内存模型
Void str(char  abc[30][60]);
void str(char abc[  ][60]);   二维数组做形参,退化为指针,60为指针步长
void str(char (*abc)[60]);手工加 * ,手工完成编译器任务,其实就是数组指针


等价关系
     数组参数                                              等效指针参数 


一维数组 char a[ 30 ]  ------------------------------->  指针char × a
指针数组char  × a [ 30]-------------------------------->指针的指针 char × × a
二位数组 char a[30 ][30]-------------------------------->数组的指针 char(×a)[30]


16:ASCII编码对照表
ASCII值 字符 ASCII值 字符 ASCII值 字符
Decimal Hex Decimal Hex Decimal Hex
000 000 NUL     020 014 DC4(^T) 040 028 (
001 001 SOH    (^A) 021 015 NAK(^U) 041 029 )
002       002 STX    (^B) 022 016 SYN(^V) 042 02A *
003 003 ETX    (^C) 023 017 ETB(^W) 043 02B +  
004 004 EOT    (^D) 024 018 CAN(^X) 044 02C  ,   
005 005 ENQ    (^E) 025 019 EM(^Y) 045 02D -   
006 006 ACK    (^F) 026 01A SUB(^Z) 046 02E .
007 007 BEL    (Bell) 027 01B ESC 047 02F /
008 008 BS    (^H) 028 01C FS 048 030 0
009 009 HT    (^I) 029 01D GS 049 031 1
010 00A LF    (^J) 030 01E RS 050 032 2
011 00B VT    (^K) 031 01F US 051 033 3
012 00C FF    (^L) 032 020 (空格) 052 034 4
013 00D CR    (^M) 033 021 ! 053 035 5
014 00E SO    (^N) 034 022  "   054 036 6
015 00F SI    (^O) 035 023 # 055 037 7
016 010 DLE    (^P) 036 024 $   056 038 8
017 011 DC1 (^Q) 037 025 % 057 039 9
018 012 DC2       (^R) 038 026 & 058 03A
019 013 DC3 (^S) 039 027 '   059 03B
        
ASCII值 字符 ASCII值 字符 ASCII值 字符
Decimal Hex Decimal Hex Decimal Hex
060 03C <     099 063 c 138 08A è
061 03D = 100 064 d 139 08B ï
062       03E > 101 065 e 140 08C î
063 03F ? 102 066 f 141 08D ì  
064 040 @ 103 067 g 142 08E Ä 
065 041 A 104 068 h 143 08F Å 
066 042 B 105 069 i 144 090 É
067 043 C 106 06A  j   145 091 æ
068 044 D 107 06B k 146 092 Æ
069 045 E 108 06C l   147 093 ô
070 046 F 109 06D m 148 094 ö
071 047 G 110 06E n 149 095 ò
072 048 H 111 06F o   150 096 û
073 049 I 112 070 p 151 097 ù
074 04A J 113 071 q 152 098 ÿ
075 04B K 114 072 r 153 099 Ö
076 04C L 115 073 s 154 09A Ü
077 04D M 116 074 t 155 09B <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值