NDK探究之旅《四》——指针的强化理解

NDK探究之旅:

NDK探究之旅《一》——对jni和NDK的认识android

NDK探究之旅《二》——C语言的基本认识bash

NDK探究之旅《三》—C语言的输入输出函数微信

什么是指针

所谓指针就是 一块内存内存空间或者说 内存地址函数

64位和32位

好比说咱们的电脑:学习

  • 32位
    • 32位能够表示一个int类型,咱们都知道一个int能够表示2的32次方内存空间。2的32次方为2^32 = 4 294 967 296,4 294 967 296 / 1024 / 1024 / 1024 = 4G
    • 所以一个32位的操做系统最多能支持4G的运行内存。
    • 计算机中有有一些内置的硬件和软件须要申请到内存地址。所以留给用户的可能不足3个G
  • 64位

为何要用位来表示呢ui

位表示内存地址时所采用的不一样方式。spa

注意:C99语法中,for循环不支持在()里面定义int变量值。操作系统

*号的含义

#include <stdio.h>
main(){
       int i = 3;//申请一快内存地址,大小为4个byte,用于储存int类型的数据
       printf("int类型所暂居的byte为:%d\n",sizeof(int));  

       int* p;//指针类型 
       //一、申请一块内存地址,空间为32位  ,大小为32位 
       //二、int* 建立出来p存放一个内存地址(大小为32位,4个byte就够用了) 
      //注意:无论任何类型的带*的变量都是32位的 
       //三、 建立一个int* 的数据类型,p是他的变量名
       //四、p里面存放的是一块内存空间的地址 
       p =  &i; 
       printf("i的内存空间的地址为: 0x%x\n",p); 
       printf("i=%d\n",i);
       printf("i=%d\n",*p);//取内存空间p里面的数据 
       system("pause");
}复制代码
*的含义有三点
  • *紧跟着一种数据类型前面int* 表示的是一种指针变量,指的是取内存控件的地址
  • 若是是跟在一个指针变量的前面 *p,表示的是去内存空间里面的数据,*p把p地址里面的数据取出来.net

  • x*y乘以指针

指针变量和指针的区别

指针变量: 指的是一个变量,int* p;则p就是指针变量

指针: 一块内存空间的地址

一些市场上的各类说法——指针和指针变量没有什么区别。

值传递和引用传递

  • 准确的来讲只有值传递,调用子函数的全部操做都是值传递

  • 引用传递,最终仍是值传递,传递的是对象的地址

示例代码:

#include <stdio.h>

void changedNum(int i,int j){

       printf("i=%d\n",i);
       printf("j=%d\n",j);
       int temp;
       temp = i;
       i = j;
       j = temp; 
        printf("i=%d\n",i);
       printf("j=%d\n",j);


}

main(){
       int i = 3;
       int j = 5;
       changedNum(i,j);
       printf("i=%d\n",i);
       printf("j=%d\n",j);

        printf("************************************************\n");
         int* p = &i;
         printf("i的地址为%d\n",p);
         printf("改变i的值,并打印p的值\n");
         i = 100; 
         printf("i只改变后的地址为%d\n",p);
         printf("改变p的值打印I的值\n"); 
         p = &j;
         printf("改变p的值后去打印:i = %d\n",i);
        system("pause"); 
}复制代码

指针的常见错误错误

  • 使用指针变量时,必须先给其进行负值,在使用

int* p ;//申明出来一个指针变量,用于存放内存地址

printf("p=%d\n",p);
野指针,不容许这样

  • 数据类型必定要匹配,什么类型的数据,就须要用什么样的数据类型

    double d = 3.222222;

    double* p =&d;

  • 不能直接给指针变量进行赋值

    下面是错误的写法

    doble* p = &2.123123

  • 不能直接用内存地址16进制去赋值(其实和上面同样)

    //错误的写法

    int* p =0x123123;

博客地址:

blog.csdn.net/androidstar…

相信本身,没有作不到的,只有想不到的

若是你以为此文对您有所帮助,欢迎入群 QQ交流群 :232203809
微信公众号:终端研发部

技术+职场
技术+职场

(欢迎关注学习和交流)

相关文章
相关标签/搜索