美文网首页Android/NDK开发C/C++C语言
(一) C语言之基本数据类型_输入输出_指针

(一) C语言之基本数据类型_输入输出_指针

作者: onestravel | 来源:发表于2019-03-06 18:27 被阅读18次

    (一) C语言之基本数据类型输入输出指针

    一、基本数据类型

    1、头文件

    引入头文件,在头文件中只有函数的声明,在编译的时候会去找到函数的实现

    #include <stdio.h>
    

    2、基本数据类型

    (1)、基本数据类型所使用的输出占位符

    数据类型 占位符
    short %d
    int %d
    long %d
    float %f
    double %lf
    char %c
    十六进制 %x
    八进制 %o
    字符串 %s

    (2)、基本数据类型所占字节数

    数据类型 字节数
    short 2
    int 4
    long 8
    float 4
    double 8
    char 1

    二、输入输出函数

    1、输入函数

    scanf("%d",&i);
    控制台输入,& 为取地址符

    2、输出函数

    printf("i的值为:%d\n",i);
    控制台输输出函数

    #include <stdio.h>
    
    void main(){
        int i;
        printf("请输入一个整数:");
        //赋值
        scanf("%d",&i);
        //打印
        printf("i的值为:%d\n",i);
        system("pause");
    }
    

    三、指针

    1、指针的定义

    指针存储的是变量的内存地址

    变量名就是对内存空间中一段数据的抽象

    内存地址就是系统给数据分配的编号

    #include <stdio.h>
    void main(){
        int i = 0;
        //指针变量,p 的值就是 i 这个变量的内存地址
        int* p = &i;
        printf("内存地址为:%#X\n",p);
        system("pause");
    }
    

    控制台输出

    内存地址为:0X8FF764
    

    指针类型的定义:在基本数据类型后加*

    如:

        float f = 88.6;
        //创建一个float类型的指针
        float* fp = &f;    
    

        float f = 88.6;
        //创建一个float类型的指针
        float *fp = &f;    
    

    通过指针修改变量的值

    void main(){
        int i = 90;
        //创建一个int类型的指针变量
        int *p = &i;
        printf("i的值为:%d\n",i);
        // p 代表变量 i 的内存地址
        // *p 代表 p 这个内存地址上的数据
        *p = 210;
        printf("i的值为:%d\n",i);
        system("pause");
    }
    

    控制台输出:

    i的值为:90
    i的值为:210
    

    指针变量的内存地址说明:

    指针变量的内存地址说明

    2、指针的类型

    指针有类型,地址没有类型;
    地址只是开始的位置,类型是指明读取到什么位置结束

    3、NULL空指针

    指针为NULL的指针,默认值为0,默认内存地址访问0x000000操作系统不允许

    void main(){
        int i = 9;
        int *p = NULL;
        
        //空指针的默认值为0
        printf("%#X\n",p);
        //访问内存地址0x000000操作系统不允许
        printf("%d\n",*p);
        getchar();
    }
    

    4、多级指针

    指针保存的是变量的地址,保存的这个变量还可以是一个指针变量

    void main(){
        int a = 50;
        //p1上保存的是 a 的地址
        int* p1 = &a;
        //p2上保存的是 p1 的地址
        int** p2 = &p1;
        printf("p1d的值为:%#x,p2的值为:%#x\n",p1,p2);
        //通过p2 改变a的值
        **p2 = 90;
        printf("a的值为:%d\n",a);
        getchar();
    }
    

    输出结果为:

    p1d的值为:0xcffa9c,p2的值为:0xcffa90
    a的值为:90
    

    5、指针运算

    指针的运算,一般在数组遍历时才有意义,基于数据在内存中线性排列的方式

    void main(){
        //数组在内存中连续存储
        int ids[] = {78,90,23,65,19};
        //数组的变量名:ids就是数组的首地址
        printf("%#x\n",ids);
        printf("%#x\n",&ids);
        printf("%#x\n",&ids[0]);
        //指针变量
        int *p = ids;
        printf("%d\n",*p);
        //指针的加法
        p++;//指针向前移动sizeof(数据类型)个字节
        printf("%d\n",*p);
        getchar();
    }
    

    输出结果为:

    0x7dfaa0
    0x7dfaa0
    0x7dfaa0
    78
    90
    

    通过指针给数组赋值

    void main(){
        int uids[5];
        int* p = uids;
        ////高级写法
        //int i = 0;
        //for (;i < 5; i++){
        //    uids[i] = i;
        //}
        //早些版本的写法
        int i = 0;
        for(; p < uids + 5 ; p++){
            *p = i;
            i++;
        }
        
    }
    

    6、函数指针

    函数指针的定义:

    [函数返回值类型]([函数指针的名称])([函数的参数列表])
    
    #include <Windows.h>
    void msg(char* title,char* content){
        MessageBox(0,content,title,0);
    }
    
    void main(){
        //msg();
        //函数指针
        void(*fun_p)(char* title,char* content) = msg;
        fun_p("消息标题","消息内容");
        getchar();
    }
    

    相关文章

      网友评论

        本文标题:(一) C语言之基本数据类型_输入输出_指针

        本文链接:https://www.haomeiwen.com/subject/htbxpqtx.html