C语言学习笔记

第一部分C语言的组成

一.基本数据类型

  1. java中有八中基本数据类型,而在c/c++中没有byte和boolean(在C中0为false,非0为true)
  2. 在c语言中多了long long unsiged(无符号,只能大于等于0)singned整形修饰
  3. 和java语言同一种数据类型所占内存大小不一致,char,long
  4. sizeof运算符,计算当前数据类型所占用的字节的大小,如果传入变量名称,计算出变量对应的数据类型的长度
  5. C的基本数据类型(九种数据类型)
    char ,int , float ,double , signed ,unsigned ,long ,short and void;
  6. java中的数据类型和C语言的数据类型对比
            java                C
    1   boolean byte        char
    2   char  short         short
    4   int  float          int long float
    8   long  double        double ,long long

二.基本输入输出函数

  1. 在c语言中都是先声明在使用的,printf输出函数和scanf输入函数均在头文件中已声明

  2. 数据输入或者输出的表现形式

         %d  -  int
         %ld – long int
         %c  - char
         %f -  float
         %u – 无符号数
         %hd – 短整型
         %lf – double
         %x – 十六进制输出 int 或者long int 或者short int
         %o -  八进制输出
         %s – 字符串
         %p-指针
             
     scanf("%d",&i);//将int变量i的地址传递  输入数据赋值给i的地址对应的数据  \n不能停止输入
     printf("i=%d\n",i); 
    

三.指针

  1. 指针就是内存地址
  2. 内存的特点
    1. 最小单位是byte
    2. 内存是线性连续的排列
    3. 32为操作系统最大的内存4G ,操作系统管理的一段内存空间,32位操作系统每一个进程的最大可用内存是4G,4G=2^32=4294967296
  3. 什么是指针
    1. 对内存最小单元进行编号 0~~4294967295
    2. 每一个内存单元的编号称之为指针
    3. 指针就是内存地址
  4. 指针的作用
    1. 可以直接访问硬件
    2. 快速传递数据
    3. 表示复杂的数据结构
    4. 方便处理字符串等
  5. 指针访问内存的运算符
    1. &取地址运算符 &变量名

    2. *取对象运算符 *指针

       #include <stdio.h>
       int main(){
           int i;//在内存中申请4个字节内存  申请大小根据数据类型确定
           i=10;//通过变量名操作这段内存
           printf("i=%d\n",i); 
           
           //通过取地址运算符获取变量i的内存地址
           &i;
           //通过*取对象运算符操作内存地址对应的内存空间
           *&i = 20;
           
           printf("i=%d\n",i); 
           return 0;
       }
      
  6. 指针变量
    1. 保存指针的变量也就是保存地址的变量;
    2. 指针变量的定义: 保存指针的数据类型 * 变量名
    3. 指针变量在32位操作系统上的内存大小为4个字节(固定的)
  7. 指针的数据类型和指针类型
    1. 指针类型: 指针变量去掉变量名 保存首地址对应的变量类型*
    2. 指针的数据类型: 指针变量指向的变量数据类型
    3. 指针的数据类型不确定指针变量占用的内存大小,决定指针变量访问的内存长度
  8. 值传递和引用传递
    1. java中:
      • 基本数据类型都是值传递
      • 对象传递都是引用传递
    2. C语言中:一般都是值传递
  9. 指针常见的一些错误
    1. 混用不同的指针 不同指针变量不能直接赋值,可强转之后再赋值,但需保证强转有意义
    2. 野指针 定义的指针变量没有合法指向,没有保存任何变量的首地址;
      • 定义指针变量要有合法的指向,如果暂时没有就指向NULL指针 int *pi=NULL
      • NULL指针不可读不可写,访问就会报错;

四.数组

  1. 数组

    • java数组对象 c语言数组相同数据类型的集合;

    • 定义数组: int arr【4】;

    • 访问数组: arr【0】 arr【1】 C语言不检查角标越界;

    • 求数组元素个数: sizeof(arr)/sizeof(arr【0】)

    • 数组名代表首元素首地址

    • 数组的传递需要传递数组名和数组元素的个数

        void print_arr(char arr[4],int count){
            int i=0;
            for(i=0;i<count;i++){
                printf("arr[%d]=%d\n",i,*(arr+i));
            } 
        } 
      
  2. 指针和数组之间的关系

    • 数组名代表首元素首地址

    • C语言中不检查角标越界

      int *pi=arr
      *(pi+0)《==》pi[0] …… *(pi+3)《==》pi[3]

  3. 进程的内存分布
    · - 局部变量 被{}包裹的变量 作用范围再{}以内 生命周期执行完{}后销毁

    • 全部变量 没有被任意的{}包裹 可以一直使用
    • static修饰局部变量 作用范围不变,生命周期和全局变量一直
  4. void *指针

    • 不同类型的指针不可以直接赋值需要强转之后才可赋值然而对于void*指针则可以直接进行赋值不需要强转,这个就是这个指针的特点;
    • 对于java中object类型的数据转化可以用void*指针来接受,
  5. malloc和free使用

  6. 字符串

    • c语言中没有字符串,以字符数组表示字符串,以“\0”作为字符串的结束标记
    • 字符串的定义---两种定义方式
            //按照字符数组方式定义字符串 
            //hello 
            //  char arr[6]={'h','e','l','l','o','\0'};
            //  char arr[6]={"hello"};
                char arr[6]="hel"; 
                int coun;
            //  arr[0]='d';
            //  printf("arr=%s\n",arr);
                
                //定义数组方式二 
            //  char *pc = "hello"; //定义了字符串常量 
            //  char *pc=arr;//定义普通字符串 可以修改字符串的数据 
            //  *pc='r';
            //  char *pc=NULL;
            //  pc="hello";
            //  *pc='p';    

- 字符串的传递只需要传递字符串首元素首地址,有\0结束标记
- 字符串求长度:便利字符数组找到\0结束标记
- 字符串函数

            - //字符串长度   coun = strlen(arr);
            - 字符串比较 int c = strcmp(arr,arr1); 

五.结构体

  1. 定义结构体,三种类型,普通的结构体,全局的结构体,匿名的结构体;

         #include <stdio.h>
         //定义结构体类型  int 
         struct Student{//struct 结构体标识  Student 结构体名 
             char *name;//姓名
             int age;
             float score; 
         };
         
         struct Student{//struct 结构体标识  Student 结构体名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//定义结构体类型全局变量 
         
         
         struct{//struct 结构体标识  Student 结构体名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//匿名结构体  只能定义一个变量 
         int main(){
             //结构体类型变量
             struct Student  stu;//局部变量 
             return 0;
         }
    
  2. 访问结构体中的字段

         stu.name="hello";
         stu.age=23;
         stu.score=59.9;
    
  3. 结构体传递属于值传递

  4. 结构体定义指针 - struct Student *pstu

  5. 通过结构体一级指针访问结构体字段

    • (*pstu).name
    • 通过一级指针指向访问pstu->name

6.联合体union
- 不能够同时操作多个字段,只能一次操作一个字段
- 联合体内存是里面最大字段占用的内存

六. 枚举

七. typedef关键字 起别名

  1. 作用:
    1. 可以简化定义,某些函数指针名或者结构体指针比较长,可以通过起别名的方式来定义,此种方式可以简化代码;
            int i;//i变量名
            typedef int i;//i代表int数据类型
            i a;//定义了int数据类型
            
            struct Student stu;//stu结构体变量名
            typedef struct Student stu;//stu 代表结构体类型 struct Student 
            stu sstu;//定义了结构体类型的变量
    
            void (*padd)(int,int,int *);//padd函数指针变量名  
            typedef void (*padd)(int,int,int *);//padd代表指针类型 
            padd ppadd;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容