c语言学习总结

本文深入探讨了C语言中main函数参数使用、sizeof与strlen的区别、#include的不同形式、头文件预处理指令以及new/delete与malloc/free的用法对比等核心主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)main函数

    int  main( int argc, char *argc[ ])

    int  main( int argc, char **argc)

    main函数所有有学c语言的人都知道,最近学会在main函数中调用参数。

    其中

        argc   表示命令行参数个数(包含可执行文件名)   
          argv   则是一个字符串数组,共有   argc   个字符串,每个串为一个参数

    举例:

        一个简单的例子   
    
          //   xren.cpp   
          #include   <stdio.h>   
          void   main(   int   argc,   char   *argv[]   )   
          {   
                  rename(   *(argv+1),   *(argv+2)   );   
          }   
      这个程序实现命令提示符下文件改名(可改目录名),用法如下   
          xren     oldname     newname 

     使用这种main函数可方便在执行程序时带入字符串参数,了解就好。

      main函数常规写法

        int  main()

        {

            。。。。。

            return   0;

        }

  

2)sizeof和strlen 

      先看个例子:

            已知 char *str1="absde";
                   char str2[]="absde";            
        使用sizeof和strlen求长度:
                sizeof(str1)=4       strlen(str1)=5    
                    sizeof(str2)=6       strlen(str2)=5                       str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串    占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=si    zeof(char*)=4,在C/C++中一个指针占 4个字节。

        str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空    间,所以sizeof(str2)取得的是字符串"absde"占的总空间。"absde"中,共有a b s d e /0    六个字符,所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6。

        strlen函数用于计算字符串长度,所见字符串字符个数即为字符串长度。

    strlen判断一个字符串的结束就是以其末尾的'/0'为界限。其实现代码可以模拟为以下:
            int strlen(char *p)
            {
               int i=0;
               while(*p++!=NULL) 

                i++;
                 return i;
            }

 

3)#include <  > 和#include "  " 区别

    #include <   >从系统目录查找,

    #include “   ”先从程序的当前目录查找,再从系统目录查找

    显然使用#include “   ”可以保证不犯错误,但实际运用中还是将二者分别使用

    #include <   >     系统库调用

    #include “   ”    调用自己编写的头文件(与c文件、cpp文件同名)

 

4)头文件中ifndef、define、endif

    使用方法:

             .h文件,如下:
                #ifndef XX_H
                #define XX_H
                    ...
                #endif

    这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 。。
    因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了

 

    所以别写头文件时,使用上述格式可防重定义。

 

5)new、delete和malloc、free    

    相同点:都可用于申请动态内存和释放内存

    不同点:
    (1)操作对象有所不同。
    malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数    据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动    执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运    算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/    free。

    (2)在用法上也有所不同。
    函数malloc 的原型如下:
    void * malloc(size_t size);
    用malloc 申请一块长度为length 的整数类型的内存,程序如下:
    int *p = (int *) malloc(sizeof(int) * length);
    我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值