C基础

C基础

#include <stdio.h>

int main() {
  printf("hello");
  return 0;
}

基础数据类型

c的基础数据类型包括:字符型【char】/整型【int/short/long】/浮点型【float/double】

对应输出函数:

%d -> int

%ld -> long int

%c -> char

%f -> float

%lf -> double

%x -> 十六进制输出int或long/int 或者 short/int

%#x -> 0x开头的16进制

%s -> 字符串

#include <stdio.h>
 
  
int main() {
  
  int i = 100;
  double d = 200;
  float f = 200;
  long l = 100;
  short s = 100;
  char c = 'C';
  
  printf("i的值: %d\n",i);
  printf("d的值: %ld\n",d);
  printf("f的值: %f\n",f);
  printf("l的值: %ld\n",l);
  printf("s的值: %d\n",s);
  printf("c的值: %c\n",c);
  return 0;
}

输出结果为:

在这里插入图片描述

函数sizeof获取数据类型所占字节数

#include <stdio.h>
int main() {
  
  printf("int 数据类型所占字节数: %ld \n", sizeof(int));
  
  printf("double 数据类型所占字节数: %ld \n", sizeof(double));
  printf("char 数据类型所占字节数 %ld \n", sizeof(char));
  return 0;
}

其结果

在这里插入图片描述

指针变量和获取地址的值
  • 指针信息

    & 代表取变量的地址

    输出函数对应 %p

    int main() {
      int i = 100;
      printf("i的地址是: %p",&i);
      return 0;
    }
    

    输出结果为:

    在这里插入图片描述

  • 指针变量

    • 操作符 *,获取地址的值

      int main() {
        
        int i = 100;
        double d = 200;
        printf("i的值是: %d\n",i);
        //通过 * 操作的必须是指针,其意义是获取地址的值
        printf("使用*获取的i值:%d \n", *(&i));
        
        return 0;
      }
      

      在这里插入图片描述

    • 指针存放地址

      int main() {
        int i = 100;
        int* p = &i;
        printf("p地址上的值是:%d \n",*p);
      }
      
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200819120213348.png#pic_center)
      
  • 指针操作

    • 指针修改值

      int main() {
        int i = 100;
        int* p = &i;
        printf("i的值: %d\n",i);
        *p = 200;
        printf("i的值: %d\n",i);
      }
      

      在这里插入图片描述

    • 方法传递修改值

      void change(int* i) {
        printf("change中的i地址:%p /n",&i);
        *i = 200;
      }
      int main() {
        int i = 100;
        printf("i地址是: %p /n",&i);
        change(&i);
        printf("i值是:%d /n", i);
      }
      

      在这里插入图片描述

  • 二级指针与多级指针

    • 二级指针存放一级指针地址,一级指针指向实际存放值

      int main() {
          int num = 12;
          int* p = &num;
          int** sp = &p;
          printf("p val:%p sp val:%p \n",p,sp);
          printf("p val:%p sp val:%p \n",&p,&sp);
          printf("p val:%d sp val:%d \n",*p,**sp);
          return 0;
      }
      故对二级指针做两次取值操作即可获取实际存放值
      
  • 数组与数组指针

    • arr 的值 = arr 地址的值 ,arr 地址的值 = arr[0]的地址的值(即首地址)

      int main() {
        int arr[] = {1,2,3,4};
        printf("arr = %p",arr);
        printf("&arr = %p",&arr);
        printf("&arr[0] = %p",&arr[0]);
        return 0;
      }
      

      在这里插入图片描述

      int main() {
        int arr[] = {1,2,3,4};
        int i = 0;
        for(; i < 4; i++) {
          printf("position:%d,值:%d \r",i,*(arr+i));
        }
        return 0;
      }
      

      在这里插入图片描述

  • 函数指针(回调)

    • 函数回调(返回值)(方法名)(参数一类型,参数二类型…)

      void opt(void(callmethod)(int,int) int num1, int num2) {
        printf("---opt---\n");
        callmethod(num1,num2);
      }
      void add(int num1,int num2) {
        printf("num1 + num2 = %d\n",(num1 + num2));
      }
      int main() {
        add(1,2)
        opt(add,4,5);
        return 0;
      }
      

      在这里插入图片描述

    • 函数指针回调【(返回值)(*方法名)(参数一类型,参数二类型…)】

      void callback(int current,int total) {
        printf("current:%d, total:%d",current,total);
      }
      void optMethod(char* filename,void(*callmethod)(int,int)) {
        callmethod(12,24);
      }
      int main() {
        void(*call)(int,int);
        call = callback;
        optMethod("a.zip",call);
        return 0;
      }
      

      在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值