Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
2016-11-23 16:57
411 查看
一.什么是指针?
简单来说: 指针就是内存地址 内存地址就是指针。来看个小案例#include<stdio.h> #include<stdlib.h> /** 指针就是内存地址 内存地址就是指针 */ main() { //定义一个int类型的变量i,并且赋值为10 int i=10; //定义一个int类型的一级指针变量p int* p; //把i对应的地址给p变量 p=&i; //指针取值*p:把p变量地址对应的值取出来 printf("*p=%d\n",*p); //打印地址值 printf("p的地址值%#x\n",p); system("pause"); }
总结:p保存的是一个地址值,而*p就是去取地址值所对应的值。
二.下面通过四个小案例来加深对指针和指针变量的理解,我们先说一下指针和指针变量的区别:
指针就是内存地址,内存地址就是指针内存地址就是内存单元的编号
指针变量就是存放内存地址的变量
指针和指针变量是两个完全不同的概念
1.第一个例子,如果修改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); }
答案是没有变化的:因为此时修改了i值,p引用的还是i的地址所以p不会有变化
2.第二个例子,如果修改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); }
答案是没有变化的:因为此时将j的地址给了p,而i并没有动所以i的值不变
3.第三个例子,如果修改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); }
答案是有变化的:因为此时修改了i值,*p引用的是i的地址指向的值,所以*p的值发生了改变
4.第四个例子,如果修改*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); }
答案是有变化的:因为*p=200;此时是将*p引用的值修改为200,也就是修改了i的值。
三:”*”号的三种含义
数学运算符:3 * 7 = 21定义指针变量:int* p;
指针运算符(取值):*p表示取p对应内存地址对应的值
四:操作内存地址实现将两个数进行互换
1.第一种:使用中间变量来互换,这一种也是我们最常用的一种方法#include<stdio.h> #include<stdlib.h> /** 互换两个数 */ main() { int a = 100; int b = 150; //通过一个中间变量来互换 int temp = a; a = b; b = temp; printf("a的值:%d\n",a); printf("b的值:%d\n",b); system("pause"); }
2.第二种:我们知道C语言是可以直接操作内存的,所以我们可以直接来改变a,b两个的内存地址指向的值。
#include<stdio.h> #include<stdlib.h> /** 互换两个数 */ //通过互换两个数的地址值,来互换数字 void changeAdress(int* a,int* b) { //temp取的是指针变量a对应的内存地址的值也就是100 int temp = *a; //把a对应内存地址的值 修改为b对应内存地址的值 *a = *b; //把b对应内存地址的值 修改为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"); }
五:函数返回多个值
#include<stdio.h> #include<stdlib.h> /** 函数返回多个值 通过修改指针变量引用的值,达到返回多个值的效果。 */ void close(int* a,int* b) { *a=0; *b=0; } main() { int a=1; int b=1; //调用函数 close(&a,&b); printf("a=%d\n",a); printf("b=%d\n",b); //是docs窗口停留 system("pause"); }
总结起来其实并不难,互换就是将 a原来指向100改成指向150,将 b原来指向150改成指向100;也就是说a,b的地址并没有改变,改变的是他们的值;好了到这里对指针,指针变量的初步认识就讲完了。
相关文章推荐
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
- 学C语言_指针_2_经典指针程序_互换两个数字
- 我也要学C语言-第十六章:返回指针值的函数与指向函数的指针以及逻辑与算法分离
- C语言之指针专题一:指针变量和指针所指向的内存空间是两个不同的概念
- C语言 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
- 对C++中指针做函数返回值的认识
- C语言——指针型函数(返回指针值得函数)
- 【C语言】14-返回指针的函数与指向函数的指针
- C语言-返回指针的函数与指向函数的指针
- 【C语言】12 返回指针的函数…
- 用函数交换两个变量的值(C语言指针)
- 以指针变量作为函数形参,实现两个值的互换
- c语言中函数返回局部变量的指针(一些容易犯错的地方)
- 指针变量作为函数形参,实现两个值的互换
- C语言的两个小函数: 格式化当前时间和返回字符串中两个子字符串间的内容
- 【C语言】14-返回指针的函数与指向函数的指针
- 【C语言】14-返回指针的函数与指向函数的指针
- 给你两个有序链表,编写一个函数,把两个链表合并成一个新的有序链表,返回头指针
- C语言及程序设计提高例程-7 返回指针的函数
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)