首页 > 代码库 > android jni 之C语言基础

android jni 之C语言基础

  *含义

1.乘法 3*5 
2.定义指针变量 int * p;//定义了一个名字叫p的变量,能够存放int数据类型的地址
3.指针运算符,
    //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量

  打印数据类型

%d  -  int
%ld – long int
%c  - char
%f -  float
%lf – double
%x – 十六进制输出 int或者long int或者short int
%o -  八进制输出
%s – 字符串

  3、指针

指针就是地址. 热身小程序 介绍指针
int * p; //p是变量的名字, int * 表示p变量的数据类型是存放int类型的地址的数据类型
//int * p; 不表示定义了一个名字叫做*p的变量
// int * p; 应该这样理解: p是变量名, int *是数据类型 ,p变量的数据类型是int*
//所谓int * 类型 实际就是存放int变量地址的类型    
int i = 3;
p = &i;
/*1. p保存了i的地址, 因此p指向i
  2. p不是i,i也不是p,修改p的值不影响i的值,修改i的值也不会影响p的值
  3. 如果一个指针变量指向了某个普通变量, 则 *指针变量  就完全等同于  普通变量
               例子:    
                    如果p是个指针变量,并且p存放了普通变量i的地址则p指向了普通变量i
*p 就完全等同于 i 在所有出现*p的地方都可以替换成i 在所有出现i的地方都可以替换成*p *p 就是以p的内容为地址的变量
*/ j = *p; //等价于 j = i; printf("i = %d, j = %d\n", i, j);

  4、指针与数组

数组名,下标和指针的关系,指针变量的运算
数组名
int a[5] //a是数组名,5是数组的大小,元素个数
int a[3][4] // 3行4列 a[0][0]就是数组的第一个元素
Int b[5]
A=b ;//错误

一维数组名是个指针常量,它存放的是一维数组第一个元素的地址
int a[5];
int a[3][4];
printf("%#X\n",&a[0]);
printf("%#X\n",&a);
下标和指针的关系
如果p是个指针变量 则p[i] 等价于 *(p+i)

  5、动态分配内存

动态内存分配问题
    传统数组的缺点
        1.数组长度必须实现指定,
        并且只能是常整数.
        int a[5];
        int len;
        int a[len];//error
        2.传统形式的数组,程序员没法手动释放空间
    数组一旦定义,系统为该数组分配的空间一直存在
    函数运行完毕,数组的空间就被释放
        3.数组的长度不能在函数运行中动态增加或者缩小    
        4.A函数定义的数组只有在A没执行完毕前被使用,a函数运行完毕后,a的数组就无法被其他函数使用
# include <stdio.h>
# include <malloc.h>  //不能省  malloc 是 memory(内存) allocate(分配)的缩写
int main(void)
{
    int i = 5; //分配了4个字节 静态分配   11 行
    int * p = (int *)malloc(4); //12行
        /*
            1. 要使用malloc函数,必须添加malloc.h这个头文件
            2. malloc函数只有一个形参,并且形参是整型
            3. 4表示请求系统为本程序分配4个字节
            4. malloc函数只能返回第一个字节的地址
            5. 12行分配了8个字节, p变量占4个字节, p所指向的内存也占4个字节
            6. p本身所占的内存是静态分配的, p所指向的内存是动态分配的       
        */
    *p = 5; //*p 代表的就是一个int变量, 只不过*p这个整型变量的内存分配方式和11行的i变量的分配方式不同
    free(p); //freep(p)表示把p所指向的内存给释放掉  p本身的内存是静态的,不能由程序员手动释放,p本身的内存只能在p变量所在的函数运行终止时由系统自动释放 
    printf("大家好!\n");
    return 0;
}

     6、函数指针

1.定义int (*pf)(int x, int y);
2.赋值 pf = add;
3.引用 pf(3,5);