JNI之C入門

什麼是jni

C

數據類型

輸出函數

不亂用佔位符java

也能夠是 雙引號

輸入函數

內存地址

內存地址修改

指針入門

指針常見的錯誤

指針必須指向 是代碼裏申請的內存,才能操做指針

指針用處:交換兩個數的值

指針用處:一個函數返回多個值(其實直接改)

數組和指針之間的關係

指針變量長度

多級指針

多級指針應用

15_棧內存和靜態內存分配

堆內存_動態內存分配

#include<stdio.h> 
#include<stdlib.h> 
/**
java new對象就會申請一塊堆內存
c   malloc memory allocation 內存分配 
c的堆內存 程序員手動申請手動釋放  malloc
free 
申請一塊堆內存 動態內存分配 
堆內存 不連續的 
堆內存大小不固定 取決機器的狀態 
*/
main(){ 
        //malloc 接收的參數 申請內存大小 返回一個內存地址值 申請到的也是一塊連續的內存空間   
      int* pointer = malloc(sizeof(int)*5);
      *(pointer+0) = 1;
      *(pointer+1) = 2;
      *(pointer+2) = 3;
      *(pointer+3) = 4;
      *(pointer+4) = 5;
      //C for 循環 循環的臨時變量i 要先聲明再使用 
      int i;
      for(i = 0;i<5;i++){
              printf("第%d個元素的值= %d\n",i,*(pointer+i));
              }
      free(pointer);
      printf("第一個元素的值%d\n",*(pointer+0));
       system("pause"); 
       } 

複製代碼

16_學生學號管理系統

擴展內存 程序員

#include<stdio.h> 
#include<stdlib.h> 
/**
保存班級人數
申請一塊堆內存保存學生的學號
來了幾個插班生
擴展一下堆內存
保存插班生的學號 
realloc re- 
*/
main(){ 
       printf("請輸入班級的人數:");
       int count;
       scanf("%d",&count);
       //申請一塊堆內存
       int* pointer = malloc(sizeof(int)*count);
       int i;
       for(i = 0;i<count;i++){
             printf("請輸入第%d個學生的學號:",i+1);
             scanf("%d", pointer+i);
             }  
       for(i = 0;i<count;i++){
             printf("第%d個學生的學號是:%d\n",i+1,*(pointer+i));  
             } 
       printf("請輸入插班生的人數:");
       //聲明一個變量increment用來保存 插班生的人數 
       int increment;
       //接受用戶的輸入 
       scanf("%d",&increment);
       //從新申請一塊足夠大的內存 
       //若是 malloc申請到的內存後面還有足夠的空間 realloc會在malloc申請的內存空間後繼續申請足夠大的內存空間
       //若是 malloc申請到的內存後面沒有足夠的空間 realloc會找到一塊足夠大的堆內存 而且把 malloc申請到的內存中的值複製過來 
      pointer = realloc(pointer,sizeof(int)*(count+increment));
      for(i = count;i<count+increment;i++){
             printf("請輸入第%d個學生的學號:",i+1);
             scanf("%d", pointer+i);
            }
      for(i = count;i<count+increment;i++){
            printf("第%d個學生的學號是:%d\n",i+1,*(pointer+i));  
            }
       system("pause"); 
       } 

複製代碼

結構體

函數指針 數組

結構體指針 bash

#include<stdio.h> 
#include<stdlib.h> 
/**
c結構體 相似java的class  struct來聲明c的結構體 
結構體的大小大於等於結構體中每一變量的佔字節數的和
 結構體的大小是最大的那個變量所佔字節數的整數倍 
 C結構體中不能定義函數  
 
 函數指針的定義   返回值(*函數指針變量名字)(返回值); 
 -> 間接引用運算符   
*/
void study(){
           printf("good good study!\n");
           }
typedef struct Student{
      int age;  //8
      int score;  // 4
      char sex;   //1
      void(*studypointer)();
      } stud;
main(){    
 stud stu = {18,100,'f'};
 stu.studypointer = &study;
 stu.studypointer();
 struct Student* stuPointer = &stu;
 printf("*stuPointer.age = %d\n",(*stuPointer).age);
 (*stuPointer).sex ='m';
 printf("stu.sex = %c\n",stu.sex);
 printf("stuPointer->age = %d",stuPointer->age);
 //printf("stu.age = %hd\n",stu.age);
 //printf("stu.score = %d\n",stu.score);
 //printf("stu.sex = %c\n",stu.sex);
// printf("結構體student佔%d個字節\n",sizeof(stu));
       system("pause"); 
       } 

複製代碼

聯合體

枚舉

自定義類型

相關文章
相關標籤/搜索