学习JNI(五) :C语言之指针

38 篇文章 1 订阅
32 篇文章 0 订阅

#指针
什么是指针:
指针就是一块内存空间,就是一个内存地址
默认c语言的指针 32位内存空间
0x00000000~ 0xffffffff

#指针和指针变量是两个不同的概念
* 指针代表的是一块内存地址
* 指针变量是一个存储指针的变量,存储这块内存地址

  1. l指针就是地址,地址就是指针
  2. l地址就是内存单元的编号
  3. l指针变量是存放地址的变量
  4. l指针和指针变量是两个不同的概念
  5. l但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样

#include <stdio.h> 
main()  
{
      //声明一个变量。声明一块内存空间,变量的名字叫i ,变量的类型是int , 可以存放一个int类型的数据。 
   
      int i; //4个byte 
      
      //把3的数据,放在i变量里面,放在i对应的内存空间里面 
       
      i = 3;  //4个byte 
      
      //&i;//取出来i的地址。 0x2266ff  //需求把一个地址数据存储起来。 
        
      //声明一个变量,声明一个内存空间,变量的名字叫p, 变量的类型int* ,可以存放的数据int* 的数据,int类型变量在内存中的地址。 
      int* p; // 4个byte 
      
      p = &i;
      
      printf("i=%d\n",i);
      printf("p=%#x\n",p);
      
      //把p变量,里面存放的内存地址 ,根据这个内存地址把这个地址里面的数据取出来
      printf("*p=%d\n",*p); 
      
      system("pause"); 
}

以上这段程序只需要8个字节

 



#修改交换数据的模板
* 传递的应该是要修改变量的内存地址
* 子函数里面 根据这个内存地址,把这个内存地址里面的数据给修改了

#include <stdio.h> 

void swap(int i ,int j){
        
      printf("互换数据\n");      
      int temp;
      temp = i;
      i = j;
      j = temp;
          
}


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

      swap(i,j);

      printf("i=%d\n",i);
      printf("j=%d\n",j); 
        
    
      system("pause"); 
}

 

失效


#include <stdio.h> 

//参数变成了  变量在内存空间的地址  p,q都是指针变量 用来存放地址 
//主函数调用的时候 传递不是 i,j 而是i和j变量在内存中的地址。 
void swap(int* p ,int* q){   
      printf("互换数据\n"); 
      //*p //把p地址里面存放的数据取出来   i
     // *q //把q地址里面存放的数据取出来   j
      int temp;
      temp = *p;
      *p = *q;
      *q = temp;      
}

main()  
{
      int i = 3;
      int j = 5;
      printf("i=%d\n",i);
      printf("j=%d\n",j);
      //传递地址 
      swap(&i,&j);
      printf("i=%d\n",i);
      printf("j=%d\n",j); 
      system("pause"); 
}

 

有效


11_利用指针可以方便表示字符串

#include <stdio.h> 
main()  
{
      //c语言用字符数组表示一个字符串。要求字符串结尾 \0  
      char arrays[6]={'h','e','l','l','o','\0'}; 
      
      char* s = "sdlkjflksjfladsjflsjfdlaskfaf"; 
      
      char* name ="zhangsan";
      char* password="123456";
      
     
      
      printf("s=%s\n",s);

      system("pause"); 
}
  

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值