> 文章列表 > Python:蟒蛇大战C语言(一)

Python:蟒蛇大战C语言(一)

Python:蟒蛇大战C语言(一)

并非特意比较,也没有贵贱之嫌,对比着学和互相借鉴总之是有好处的吧我觉得

目录

1.命名空间   

2.结构体 

3.模板与泛型   

4. 为类型取别名(创建同义词):typedef

5.只读变量

6.lambda表达式的应用

7.宏定义

8.字符表示

9.整型表达方式

10.整型溢出表达    

11.字符数组表达

12.字符串表达

13.常量表达形式

14.const关键字的限制和分级作用


1.命名空间   

py有没有命名空间,如果没有,如何解决标识符冲突问题?c的命名空间一定要写吗?

2.结构体 

c的结构体和py字典好像,那为什么py中不能用字典来代替对象使用?(问的有点蠢)

3.模板与泛型   

c中有模板(泛型编程的基础),Python中有吗,如果没有那有什么其他的方式达到这种代码复用的效果?java 中有吗?(有java什么事?)
  “  template模板并没有我们想的那么高大上,就是说仅仅一个函数可以千变万化,其实并不是千变万化也并不是一个函数;
        我们刚刚也看到了,模板的底层就是通过看你传入参数的类型,
    给你分配一个适用你传入类型的函数,你传入int类型,他就给你一个适用int类型的函数,
    你传入char他就给你一个适用char类型的函数;如果你连续传入int、char等n个类型进行排序,那么他的底层就会给你分配n个函数,并不是一个函数实现的类型自适应;
    总结
        1、我们使用模板的目的就是为了提高代码的复用性,减少重复代码的编写;
        2、函数模板的底层并不是只有一个函数完成的,它是根据你传入参数的类型,给你分配一个适用你传入类型的函数;如果你连续传入n个类型,他就会给你分配n个函数;”
    ————————————————
    版权声明:本文为CSDN博主「是星星鸭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_52572621/article/details/127872426
    以下参考:https://blog.csdn.net/m0_65508678/article/details/126673369

4. 为类型取别名(创建同义词):typedef

    typedef代码简化
     上面讨论的 typedef 行为有点像 #define 宏,用其实际类型替代同义字。
    不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。例如:
    c中的typedef为现有类型创建一个新的名字,py中怎么实现这种功能?
    typedef int size;
    此声明定义了一个 int 的同义字,名字为 size。
    注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size:
    void measure(size * psz); size array[4];size len = file.getlength();std::vector <size> vs; 
 
    c中的typedef还可以掩饰符合类型,如指针和数组?这块还没弄清除,后续补充
    c中的typedef struct 结构名
    {
    类型 变量名;
    类型 变量名;
    ...
    } 结构别名;  能够在定义结构体的时候就直接指定一个别名,python在定义类的时候可以使用别名吗?
    
   c中struct _hello{
    int x,y;
    } hello; //可以同时定义类和对象,python中可以吗?

5.只读变量

       c中const用来限定某类型变量为只读,在后续程序中不可更改其值,py中哪个关键字可以做到吗?如果没有关键字有什么方式达到目的?

6.lambda表达式的应用

py中有lambda函数,C有吗?怎么表示的?
py的匿名函数,一次性嵌入性的调用,不需要提供给其他地方调用它,也是一种闭包,同时也是一个函数对象,内部创建了一个重载()操作符的类
        lambda x,y: x*y    参数是x,y,返回x*y的值
        在map(lammda x: x*2,list)   返回一个每个元素乘以2之后的列表
        c中的lambda可以参考:http://www.360doc.com/content/22/1025/00/78357527_1053155816.shtml
    c中的lambda表达式如下示例,c11中新增好像?
        [](){}():
        []:代表lambda的开始,
        ():第一个括号表示函数参数,若无参数将要传递,可以省略
                {}:函数体,具体执行表达式的地方
                ():代表函数调用

7.宏定义

c语言中的宏定义,py有常量的概念吗?
c 常量和宏定义参考:https://blog.csdn.net/m0_66005670/article/details/128010706
c中  宏表示一个符号常量,其表示一个字符串,宏处理是由预处理程序完成的

    #跨行宏定义:https://blog.csdn.net/qq_41854911/article/details/121196531
    #定义一个交换数值的多行宏,使用反斜杠连接不同行
    #define SWAP(a,b) do { \\
        int t = 0;\\
        t = a;\\
        a = b;\\
        b = t;\\
    } while(0)

    #define B(n) 2*n
    #define DL "\\t"
    int main{
        printf("Line1%c", DL);
        printf("%d\\n",  B(4+2));
    }
    
    #注销宏定义
    #undef DL

8.字符表示

c 语言中的单引号中只能有单个字符,多个字符需要双引号,py单引号可以放多个吗?
c语言中的单引号,特殊性在于只能有一个字符
py中的单引号和双引号一样使用,可以任意长字符串,使用格式化和正则的时候有些不同

9.整型表达方式

c 语言中整型变量的分为无符号和有符号,py为什么没有分?
    参考:
    https://blog.csdn.net/zcx020307/article/details/126095836
    https://blog.csdn.net/zcx020307/article/details/126095836
    byte 字节 1 正负2^7  
    short : 短整型 2 正负2^15    unsigned short 2^16    
    int : 基本类型 4 正负2^31    unsigned int 2^32 
    long:长整型 4 正负2^31     unsigned long 2^32
    longlong: 长长整型 8 正负2^63 unsigned long long 2^64
    无符号整型比有符号整型在正整数上都要大一倍
    #include <stdio.h>
    int main(){
        int x,y,z;
        unsigned int u;
        x=1;
        y=2;
        u=3;
        z=x+y+u;
        printf("z=%d", z)
        return 0;
    }

10.整型溢出表达    

c语言中整形数据的溢出,结果会发生反转,正负值变换,在py中会出现溢出吗?
    a: 0111 1111 1111 1111 1111 1111 1111 1111 (共32位)
    b: 1000 0000 0000 0000 0000 0000 0000 0000 (共32位)
     以下参考学习:
    https://blog.csdn.net/jx2091163852/article/details/126257326
    https://wenku.baidu.com/view/31c724ea9a8fcc22bcd126fff705cc1755275fb4.html

11.字符数组表达

c语言中的字符数组的赋值可以表示字符串,py中有字符数组形式吗?
    char a[20] = "hello" // 存在于栈上,存取效率快
        可以通过指针去访问和修改数组内容
    char str[] = {'b','i','t','\\0'}; 
    字符数组表示字符串,需要追加'\\0'作为截止符号

12.字符串表达

c语言中可以用指针表示字符串?py有指针吗?
    char *a = "abcd"; 
        //“abcd”存放于常量存储区,通常指针只可以访问字符串常量而不可以改变其值
        赋值时在编译时就确定了,(因为是常量)

13.常量表达形式

c语言的常量具有多种表示方法,py中有常量吗?如何表示?
    参考:https://blog.csdn.net/qq_58325487/article/details/120812764
    1.字面常量 2.34;  "abc"; 2000;  
    2.常变量:const int num = 29; 语法层面限制变量不能直接改变,num变量
        事实上C的const仅是语法上的限制
        以下参考:https://www.cnblogs.com/xiaoxie001/p/16123161.html
        用const来防止误操作
        
        struct student{string name; int age;int score};
        void printStudent(const student *stu){
            // stu->age = 100; 操作失败
        }
        int main()
        {
            student stu = {"zhan"}
        }

    3.标识符常变量 #define  MAX 123; 标识符一般大写,可以预定义短函数,以及特殊字符处理
    4.枚举常变量 enum Sex {MALE,FEMAIL,SECRET}

     c为什么已经存在#define 宏定义,还要const做常量限制?
    参考:https://www.bbsmax.com/A/kjdwQZLwJN/
    通常使用define定义一个宏,如#define PI 3.1415,以后无论在哪里需要使用圆周率时,我们直接使用PI即可,而在编译时预处理器会将所有的PI替换为,3.1415,这很方便,但是由于编译器不会对其进行检查,如果使用不慎就会引入错误,而且此种错误很难发现,而且,我们也无法得到PI的地址,不能向PI传递指针或引用为此,我们常使用const关键字修饰的宏变量来代替宏。使用const声明的变量虽然增加了分配空间,但是可以保证类型安全,并且可以得到指针。const消除了预处理器的值替代的不良影响,并且提供了良好的类型检查和安全型。

14.const关键字的限制和分级作用

理解了const关键字,对我们的编程有很大帮助。它可以做到添加限制防止出现对特定变量的修改
参考:https://blog.csdn.net/qq_43205256/article/details/123125530     

c语言中的size_t strnchr(const char *str)可以用来限制指针形参,以及提升形参权限,py有这种类似机制吗?
    
     
    
     
        

拔智齿网