NDK系列(一)C语言基本了解

基本项目结构

#include 
// <> 寻找系统的资源
// “” 寻找我们自己写的资源
// .h .hpp(声明文件 头文件)
// .c  .cpp (实现文件)

// 代码结构
int main() {  // 函数的主入口
    printf("坚强的");

    getchar(); // 阻塞程序
    return 0;
}

基本数据类型

#include 

// 基本数据类型
int mainT2() {

    int i = 100;
    double d = 200;
    float f = 200;
    long l = 100;
    short s = 100;
    char c = 'd';
    // 字符串
    char * str = "Derry";

    // 不是随便打印的,需要占位
    printf("i的值是:%d\n", i); // d == 整形
    printf("d的值是:%lf\n", d); // lf == long float
    printf("f的值是:%f\n", f); // f == float
    printf("l的值是:%d\n", l); // d == 整形
    printf("s的值是:%d\n", s); // s == short
    printf("c的值是:%c\n", c); // c == char
    printf("字符串:%s\n", str); // s == String

    printf("Derry");
    // getchar();
}

基本数据类型所占字节数

#include 

int main() {

    printf("int 数据类型所占的字节数:%d\n", sizeof(int));// 4
    printf("double 数据类型所占的字节数:%d\n", sizeof(double));//8
    printf("short 数据类型所占的字节数:%d\n", sizeof(short));//2
    printf("long 数据类型所占的字节数:%d\n", sizeof(long));//8
    printf("float 数据类型所占的字节数:%d\n", sizeof(float ));//4
    printf("char 数据类型所占的字节数:%d\n", sizeof(char ));//1
    printf("str 数据类型所占的字节数:%d\n", sizeof(char * ));//8

    return 0;
}

地址与指针:在C中 万物皆地址

// 地址概念
// Java 万物皆对象
// C C++(对象) 万物皆指针
// Linux 万物皆文件
int main() {

    // 指针 == 地址

    // %p == 地址输出的占位
    // & == 取出地址

    int number1 = 100000;
    printf("此number1变量的地址是:%p\n", &number1); // 地址 == 00B3FE90

    return NULL;
}

指针取值

int mainT5() {

    int number_int = 100;
    double number_double = 200;
    printf("number_int的值是:%d\n", number_int);
    printf("number_double的值是:%lf\n", number_double);

    // * == 取出number_int地址所对应的值 == 100
    // 指针取出值
    // 既然任何变量都是地址,可以使用都在获取值(灵感)
    printf("number_int的值是:%d\n", *(&number_int));
    printf("number_double的值是:%lf\n", *(&number_double));


    //   ================   难度

    int * intP = &number_int;
    double * doubleP = &number_double;

    // 输出 100  和 200
    printf("number_int的值是:%d\n", *intP);
    printf("number_double的值是:%lf\n", *doubleP);

   /**
       内存地址 == 指针
       指针 == 内存地址
        int *,  double *      (int类型的指针)

        指针别名,指针变量 == 就是一个变量而已,只不过 是指针的 变量 而已
        intP,  doubleP
     */

    return NULL;
}

使用函数的时候 传值 如果想修改值 要传值所对应的地址 才能修改

#include 

// C语言不允许函数重载,    Java可以,C++可以

// void change(int i); // 先声明

void change(int * i); // 先声明

// 函数 取修改一个数(指针操作)
int mainT7() {

    int i = 100;

    change(&i);

    printf("%d\n", i);

    // * i 和 *i 有什么区别呢  没区别 写法而已

    /*
        int * i;  定义指针

        *i = 888;  取出内存地址所对应的值修改成 888
    */

    return 0;
}

// 函数不能写在 main的下面,会报错
// void change(int i) {}

// 再实现
/*void change(int i) {

    printf("change内存地址:%p\n", &i);

    i = 200;
}*/

// 再实现
// 使用指针 来修改
void change(int * i) {

    *i = 666;
}

实例:交互两个数

#include 

// 由于C语言不支持函数重载,所以声明的函数,不需要写参数

void changeAction();

int mainT8() {
    int a = 100;
    int b = 200;

    changeAction(&a, &b);

    printf("交换完成后的效果:%d,%d\n", a, b);

}

// 只接收指针(内存地址)    内存地址 == 指针
//方法一
void changeAction(int * a, int * b) {

    int temp = *a;

    *a = *b;

    *b = temp;
}

方法二
void changeAction(int * a, int * b) {

    int sum = *a + *b;

    *a = sum - *a;

    *b = sum - *b;
}


你可能感兴趣的:(NDK系列(一)C语言基本了解)