C语言学习记录

  • 库函数
    1. #include <stdio.h>

      • gets

        gets(一个字符串的首地址) 用于输入字符串 可以从输入缓冲区中读取一个字符串存储到字符指针变量___所指向的内存空间。

        • 头文件<stdio.h>
    2. #include <string.h>

      • strcpy

        strcpy(目标空间的起始地址,源空间的起始地址)

        • 头文件是<string.h>
        • 会传递字符串的'\0'
        • 返回值是目标空间的起始地址。
      • strcmp

        strcmp(一个字符串首地址,另一个字符串首地址)判断两个字符串是否相同,相同返回0,串1>串2返回值大于0,串2>串1,返回值小于0。

        • 头文件<string.h>
      • strlen

        strlen(需要计算的字符串)计算字符串长度

    #include <stdio.h>
    #include <string.h>
    int main()
    {
      char str[30] = "good morning everybody" ;  // 22个字符
      printf(" str = %s  strlen(str) = %d \n",str,strlen(str));
      return 0 ;
    }
    
    
        - 头文件<string.h>
        - 计算结果到'\0'截止,'\0'不算长度。
        - 注:需要初始化字符串,否则会沿着栈区寻找'\0'导致计算结果不准确。
    
  1. #include <assert.h>

    • assert [//]: # (健壮性;鲁棒性;)

      assert(需要判断的条件) 断言

      • 头文件<assert.h>
    assert(/*判断式子*/);  //括号中可以调用函数
    

 

  • \

    \ 转义字符

    1. 常见有
    2. \ 为单鞋斜杠 前一个""作为转义字符 后一个""为反斜杠
  • const

    const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变。

    //修饰局部变量
    const int n=5;
    int const n=5;
    //修饰常量静态字符串
    const char* str="fdsafdsa";
    //常量指针是指针指向的内容是常量,可以有一下两种定义方式。
    const int * n;   //*n不可改变(n指向的变量的值不可以通过指针改变) 但是可以改变指针n指向的地址
    int const * n;   //*n不可改变(n指向的变量的值不可以通过指针改变) 但是可以改变指针n指向的地址
    //指针常量是指指针本身是个常量,不能在指向其他的地址
    int *const n;    //n是不可变的(n指向的地址不可以通过指针改变) 但是可以通过指针修改指向变量的值
    
    
    
  • 变量类型

    • int 整型常量
      1. size_t — unsigned int 无符号整数型
  • 声明

    1. extern修饰函数声明
    extern Add(int x, int y); //声明,不是定义
    int Add(int x, int y); //声明,也是定义
    
    
  1. extern修饰变量的声明
#include <stdio.h>
 
// 函数外定义变量 x 和 y
int x;
int y;
int addtwonum()
{
    // 函数内声明变量 **x 和 y** 为外部变量
    extern int x;
    extern int y;
    // 给外部变量(全局变量)x 和 y 赋值
    x = 1;
    y = 2;
    return x+y;
}
 
int main()
{
    int result;
    // 调用函数 addtwonum
    result = addtwonum();
    
    printf("result 为: %d",result);
    return 0;
}
  1. extern修饰符可用于指示C或者C++函数的调用规范
    • 在C++中调用C库函数,就需要在C++程序中用extern"C"声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同。
调用约定参数压栈顺序平衡堆栈
__cdecl从右往左依次入栈调用者清理堆栈
__stdcall从左往右依次入栈自身清理堆栈
__fastcallECX/EDX传递前两个参数剩下的从右往左依次入栈自身清理堆栈
  • 栈区

    • 栈区的使用习惯是:先使用高地址,再使用低地址
    • 数组随着下标的增长,地址是由低到高的变化的
    •  

  • 指针

    定义:指针(Pointer)是编程语言中的一个对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需变量单元,可以说,地址指向该变量的单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

    int a = 10;//a占用四个字节
    int * pa = &a;//拿到的是a的4个字节中第一个字节的地址
    

        定义的指针的地址(pa)可以称为“指针变量”。

        大小:在32位平台是4个字节(4(个字节)*8(bit)=32(根地址线)),64位平台是8个字            节。

  • 数组

    • 标准规定
      1. 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存的位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
  • 算数操作符

    • 逗号操作符
      • 从左到右依次计算 取最右边的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值