Android NDK基础2:C_指针类型_空指针_多级指针_指针运算

指针类型

#include <stdio.h>
#include <stdlib.h>

//1.指针为什么要有类型?
//指针有类型,地址没有类型
//地址只是开始的位置,类型读取到什么位置结束
void main() {
    int i = 100;
    //int 类型的指针
    int *p = &i;
    double j = 78.9;
    //赋值为double类型变量的地址
    p = &j;
    printf("double size:%d\n", sizeof(double));
    printf("%#x, %lf\n", p, *p); //想通过4字节读取8字节变量的值,是不行的   

    getchar();
}

空指针

//2.NULL空指针
void main() {
    int i = 9;
    int *p = NULL;
   //p = &i;

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

多级指针

//3.多级指针(二级指针)
//指针保存的是变量的地址,保存的这个变量还可以是一个指针变量
//动态内存分配给二维数组
void main() {
    int a = 50;
    //p1上保存的a的地址
    int* p1 = &a;

    //p2上保存的p1的地址
    int** p2 = &p1;

    //int*** p3 = &p2;

    printf("p1:%#x, p2:%#x\n", p1, p2);

    **p2 = 100;
    printf("%d\n",a);

    getchar();
}

指针运算

//4.指针的运算
//指针的运算,一般在数组遍历时才有意义,基于数组在内存中线性排列的方式
void main() {
    //数组在内存中连续存储
    int ids[] = { 78, 90, 23, 65, 19 };
    //数组变量名:ids就是数组的首地址
    //ids、&ids、&ids[0]都是数组的首地址
    printf("%#x\n", ids);
    printf("%#x\n", &ids);
    printf("%#x\n", &ids[0]);
    //指针变量
    int *p = ids;
    printf("%d\n", *p);
    //指针的加法
    p++; //p++向前移动sizeof(数据类型)个字节
    printf("p的值:%#x\n", p); //p的值加了4
    //p--;
    printf("%d\n", *p);
   getchar();
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/android-ndk-basic-c-pointer-type-null-pointer-multi-level-pointer-pointer-operation/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android NDK基础2:C_指针类型_空指针_多级指针_指针运算
指针类型 #include <stdio.h> #include <stdlib.h> //1.指针为什么要有类型? //指针有类型,地址没有类型 //地址只是开始的位置,类型读取到什……
<<上一篇
下一篇>>
文章目录
关闭
目 录