Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
生活随笔
收集整理的這篇文章主要介紹了
Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
版權(quán)聲明:本文出自阿鐘的博客,轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/a_zhon/。
目錄(?)[+]
一.什么是指針?
簡(jiǎn)單來(lái)說(shuō): 指針就是內(nèi)存地址 ???? 內(nèi)存地址就是指針。來(lái)看個(gè)小案例
#include<stdio.h> #include<stdlib.h> /**指針就是內(nèi)存地址內(nèi)存地址就是指針*/ main() {//定義一個(gè)int類(lèi)型的變量i,并且賦值為10int i=10;//定義一個(gè)int類(lèi)型的一級(jí)指針變量p int* p; //把i對(duì)應(yīng)的地址給p變量 p=&i; //指針取值*p:把p變量地址對(duì)應(yīng)的值取出來(lái) printf("*p=%d\n",*p); //打印地址值 printf("p的地址值%#x\n",p); system("pause"); }總結(jié):p保存的是一個(gè)地址值,而*p就是去取地址值所對(duì)應(yīng)的值。
二.下面通過(guò)四個(gè)小案例來(lái)加深對(duì)指針和指針變量的理解,我們先說(shuō)一下指針和指針變量的區(qū)別:
1.第一個(gè)例子,如果修改i的值,p值有變化嗎?
#include<stdio.h> #include<stdlib.h>main() {int i=100;//p就是我們的指針變量,存放地址值 int *p=&i; printf("i值修改之前,p的地址值是%#x\n",p); i=200; printf("i值修改之后,p的地址值是%#x\n",p); }答案是沒(méi)有變化的:因?yàn)榇藭r(shí)修改了i值,p引用的還是i的地址所以p不會(huì)有變化
2.第二個(gè)例子,如果修改p的值,i值有變化嗎?
#include<stdio.h> #include<stdlib.h>main() {int i=100;int *p=&i; printf("p值修改之前,i的值是%d\n",i); int j=200; p=&j; printf("p值修改之后,i的值是%d\n",i); }答案是沒(méi)有變化的:因?yàn)榇藭r(shí)將j的地址給了p,而i并沒(méi)有動(dòng)所以i的值不變
3.第三個(gè)例子,如果修改i的值,*p值有變化嗎?
#include<stdio.h> #include<stdlib.h> main() {int i=100;int *p=&i; printf("i值修改之前,*p的值是%d\n",*p); i=200; printf("i值修改之后,*p的值是%d\n",*p); }答案是有變化的:因?yàn)榇藭r(shí)修改了i值,*p引用的是i的地址指向的值,所以*p的值發(fā)生了改變
4.第四個(gè)例子,如果修改*p的值,i值有變化嗎?
#include<stdio.h> #include<stdlib.h>main() {int i=100;int *p=&i; printf("*p值修改之前,i的值是%d\n",i); *p= 200; printf("*p值修改之后,i的值是%d\n",i); }答案是有變化的:因?yàn)?p=200;此時(shí)是將*p引用的值修改為200,也就是修改了i的值。
三:”*”號(hào)的三種含義
四:操作內(nèi)存地址實(shí)現(xiàn)將兩個(gè)數(shù)進(jìn)行互換
1.第一種:使用中間變量來(lái)互換,這一種也是我們最常用的一種方法
#include<stdio.h> #include<stdlib.h> /**互換兩個(gè)數(shù)*/ main() {int a = 100;int b = 150; //通過(guò)一個(gè)中間變量來(lái)互換 int temp = a; a = b; b = temp; printf("a的值:%d\n",a); printf("b的值:%d\n",b); system("pause"); }2.第二種:我們知道C語(yǔ)言是可以直接操作內(nèi)存的,所以我們可以直接來(lái)改變a,b兩個(gè)的內(nèi)存地址指向的值。
#include<stdio.h> #include<stdlib.h>/**互換兩個(gè)數(shù)*///通過(guò)互換兩個(gè)數(shù)的地址值,來(lái)互換數(shù)字 void changeAdress(int* a,int* b) { //temp取的是指針變量a對(duì)應(yīng)的內(nèi)存地址的值也就是100 int temp = *a; //把a(bǔ)對(duì)應(yīng)內(nèi)存地址的值 修改為b對(duì)應(yīng)內(nèi)存地址的值 *a = *b; //把b對(duì)應(yīng)內(nèi)存地址的值 修改為temp *b = temp; } main() { int a = 100; int b = 150; //分別將取a,b的地址 changeAdress(&a,&b); printf("a的值:%d\n",a); printf("b的值:%d\n",b); system("pause"); }五:函數(shù)返回多個(gè)值
#include<stdio.h> #include<stdlib.h> /**函數(shù)返回多個(gè)值通過(guò)修改指針變量引用的值,達(dá)到返回多個(gè)值的效果。*/ void close(int* a,int* b) {*a=0; *b=0; } main() { int a=1; int b=1; //調(diào)用函數(shù) close(&a,&b); printf("a=%d\n",a); printf("b=%d\n",b); //是docs窗口停留 system("pause"); }總結(jié)起來(lái)其實(shí)并不難,互換就是將 a原來(lái)指向100改成指向150,將 b原來(lái)指向150改成指向100;也就是說(shuō)a,b的地址并沒(méi)有改變,改變的是他們的值;好了到這里對(duì)指針,指針變量的初步認(rèn)識(shí)就講完了。
轉(zhuǎn)載于:https://www.cnblogs.com/Free-Thinker/p/6169313.html
總結(jié)
以上是生活随笔為你收集整理的Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android简易实战教程--第四十七话
- 下一篇: Android开发——异步任务中Acti