JNI学习之C语言第二天



#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <math.h>
#include <time.h>


//1
//指針爲什麽要有類型?
//指針有類型,地址沒有類型s
//地址只是开始的位置,类型是读取到什么位置结束.
/*
void main(){
int i = 89;
//int 類型的指針
int *p = &i;


double j = 78.8;
//赋值为double类型变量的内存地址
p = &j;
//输出p的内存地址。已更改
printf("%#x\n",p);
//输出p内存地址存的东西,为0.00
printf("%lf\n",*p);


//为什么输出为0.00 就是因为指针类型为int类型。但是赋值为double。这就是指针为什么要有类型
getchar();
}
*/


//2.NULL 空指針,訪問内存地址0x000000操作系統不允許,
/*
void main(){
int i = 9;
int *p =NULL;
p = &i;


printf("%d\n",*p);
getchar();
}
*/


//3多級指針,二級指針;
//指針保存的是變量的地址,保存的這個變量還可以是地址。
//动态内存分配给二维数组
/*
void main(){


int a = 50;
//p1上保存的a的地址
int *p1 = &a;
//p2上保存的p1的地址
int** p2 = &p1;


//如果要通過p2拿到a的值
printf("p1的值為%#x\n",p1);
printf("p2的值為%#x\n",p2);
printf("a的值為 %d\n",**p2);


//修改a的值
**p2 = 100;
printf("修改后的值為%d\n",**p2);
getchar();
}
*/


//4指针的运算;
//指針的運算,一般在數組遍歷時才有意義。基於數組在内存中綫性排列的方式
/*
void main(){
//數組在内存中連續存儲
int ids[] = {78,92,23,65,19};


// 數組變量名:ids的值 就是數組的首地址,下面連個輸出結果相同,取地址ids也是一樣。
printf("%#x\n",ids);
printf("%#x\n",&ids);
printf("%#x\n",&ids[0]);




//指針變量
int *p = &ids;
printf("%d\n",*p);
//指針的加法。輸出結果為數組的下一個元素.92
p++;//p++ 向前移動sizeof(對應的數據類型)個字節.改變了内存地址。
printf("%d\n",*p);






getchar();


}


*/
//5通過指針給數組複製
/*
void main(){
int uids[5];

//int *p = uids;
//高級寫法
//int i = 0;
//for (; i < 5;i++){
// uids[i] = i;
//}






//早些版本寫法。
//p指针 指向数组的第一个元素
int *p = uids;
printf("%#x\n",p);
int i = 0;
for (; p < uids + 5;p++){ //p<uids +5.意思為 :uids是指向数组的第一個元素的内存地址。+5則是最大内存。因爲數組的内存是連續的。;P++,則是指向數組的下一個元素
*p = i; //將i 賦值給 指针p指向的内存地址,就是数组元素的值,指向的内存地址上的
i++; //改變賦值
};


getchar();
}
*/


//6函数指针
/*
void msg(char* msg,char* title){
MessageBox(0,msg,title,0);
}


void main(){
//msg();
//函數指針
//函数返回值类型,void   
//函数指针的名称 fun_p
//char* msg.char* title.函数的参数列表
//= 赋值
void(*fun_p)(
char* msg, char* title
) = msg;
fun_p("消息内容","标题");


getchar();
}
*/


int add(int a,int b){
return a + b;
}


int minus(int a,int b){
return a - b;
}


//msg函数需要传递一个函数指针参数
//第一个参数的意思为, 返回值类型为int,并且函数需要两个int类型的参数的函数 函数指针
/*
void msg(int(*p)(int a,int b),int m,int n){
int result = p(m,n);
printf("%d\n",result);
}


void main(){
//加法
msg(add,10,5);
//减法
msg(minus,10,5);
getchar();
}
*/


//用随机数生产一个数组,写一个函数查找最小的值,并且返回最小数的地址,在主函数打印出来


int* getMinPointer(int ids[],int len){
int i = 0;;
int* p = ids;
for (; i < len;i++){
if (ids[i]< *p){
p = &ids[i];
}
}
return p;
}


void main(){
int ids[10];


int i = 0;
//初始化随机数发生器。设置种子,种子不一样,随机数才不一样
//當前時間作為種子
srand((unsigned)time(NULL));


for (; i < 10;i++){
ids[i] = rand() %100;
printf("%d\n",ids[i]);
}


int* p =getMinPointer(ids,sizeof(ids)/sizeof(int));


printf("%#x,%d\n",p,*p);


getchar();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值