学习JNI(七) :12_指针和数组之间的关系/13_指针的运算/14_指针的常见错误

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

 指针和数组之间的关系

#include <stdio.h> 
/**
 arr[] 数组
 length 数组的长度 
**/
void printArr(char arr[], int length){
     int i=0;
     for(;i<length;i++){
              printf("arr[%d]=%c\n",i,arr[i]); 
     }
}

main()  
{
      //数组是一块连续的内存空间。  
      //数组名称实际上是 就是数组在内存中的首地址。  数组名实际上是一个指针变量 
      char arr[6] = {'h','e','l','l','o','\0'};
      printArr(arr,5);  
      printf("arr[0]=%c\n",arr[0]);
      printf("arr[0]=%#x\n",&arr[0]);
      printf("arr[1]=%#x\n",&arr[1]);
      printf("arr[2]=%#x\n",&arr[2]);
      
      printf("arr = %#x\n",arr); 
      printf("*arr = %c\n",*arr); 
      printf("*(arr+1) = %c\n",*(arr+1)); 
      printf("*(arr+2) = %c\n",*(arr+2)); 
      
      
      int intarr[8] = {1,2,3,4,78686,6,7,8};
      printf("*intarr = %d\n",*intarr); 
      printf("*(intarr+1) = %d\n",*(intarr+1));       
      system("pause"); 
}

指针的运算

#include <stdio.h> 
main()  
{
      int i = 3;   //山东省 解放路 小房子 门牌号30 里面住了一个3 
      double j = 5; //芝加哥 解放路 大房子 门牌号50  里面住了一个5 
      
      int* p = &i;
      double* q = &j;  
        
      //printf("p-q = %#x\n",p-q);  这样的计算没有任何意义。
      
      //指针的计算,只会在数组里面 ,连续的内存空间进行计算才有意义。 
      
      int arr[5] = {1,2,3,4,5}; 
      
      printf("p-q = %d\n",&arr[4]-&arr[0]);
    
      system("pause"); 
}
#include <stdio.h> 
main()  
{
      //32位 4byte 
      int i = 3;  
      int* ip = &i;
      double d = 3.143;
      double* dp = &d;
      float f = 234.2;
      float* fp = &f;
      long l = 32424324;
      long* lp = &l;
      long long ago = 30;
      long long* agop = &ago;
      char c = 'a';
      char* cp = &c;
      
      printf("指针的长度 ip=%d\n",sizeof(ip));
      printf("指针的长度 dp=%d\n",sizeof(dp));
      printf("指针的长度 fp=%d\n",sizeof(fp));
      printf("指针的长度 lp=%d\n",sizeof(lp));
      printf("指针的长度 agop=%d\n",sizeof(agop));
      printf("指针的长度 cp=%d\n",sizeof(cp));
    
      system("pause"); 
}


13_指针的常见错误

#include <stdio.h> 
main()  
{
      short s = 5;
      //1.数据类型要和指针类型完全匹配 
     // float* fp = &s; 
      //printf("*fp=%f\n",*fp);
      
      
      //2.指针变量未经赋值,不可使用。 
      int* p ;
      // 野指针 ,非常危险的。 
      printf("*p=%d\n",*p);
      *p = 3242; 
    
      system("pause"); 
}
#include <stdio.h> 
#DEFINE  PI 3.1415
void func(int** m){
     int i = 3;
     int* p = &i;
     *m = p;
     printf("p=%#x\n",p);    
} 


main()  
{
      int* r ;//指针变量 用于存放地址。
      
      func(&r);
      printf("---sadfdsdaf-\n");
      printf("*r=%d\n",*r); //野指针 
      printf("主函数main r = %#x\n",r); 
      system("pause"); 
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值