Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/。
一:前面我们介绍了一级指针的相关概念和用发,今天我们就来说一说多级指针。
1.定义多级指针
#include<stdio.h>
#include<stdlib.h>
/**
多级指针
指针指向的还是是内存地址
*/
main(){
//定义一个int类型的变量,并且赋值为100
int i = 100;
//定义一个int类型的一级指针变量p1,并且把i的地址赋值给它
int* p1 = &i;
//定义一个int类型的二级指针变量p2,并且把p1的地址赋值给它
int** p2 = &p1;
//定义一个int类型的三级指针变量p3,并且把p3的地址赋值给它
int*** p3 = &p2;
//定义一个int类型的四级指针变量p4,并且把p3的地址赋值给它
int**** p4 = &p3;
//多级指针取值
printf("****p4的值%d\n",****p4);
system("pause");
}
多级指针就类似于递归,一级一级一直传递下去。
二:数组的定义,数组的取值
1.先回顾一下 Java中是怎么定义的
int arr[] = { 1, 5, 36, 9, 0 };
//或者[]在左边
int[] arr = { 1, 5, 36, 9, 0 };
//数组的取值
int i = arr[0];
在C中其实和Java也差不多,不同之处在于“[ ]”只能在数组名的右边
int arr2[] = { 1, 5, 36, 9, 0 };
//数组的取值,和Java还是没有差别的,但是C语言中还有另一种方式取值
printf("arr2[0]=%d\n",arr2[0]);
2.C语言中我们可以直接用指针取值,如下:
//打印数组每个元素的地址值
int j;
for(j=0; j<5; j++) {
printf("arr2[%d]地址=%#x\n",j,&arr2[j]);
}
//使用指针取值
int i;
for(i=0; i<5; i++) {
printf("arr2[%d]=%d\n",i,*(arr2 + i));
}
为什么可以这样取呢?我们看打印的地址值可以看出,数组是一块连续的内存空间。这里arr2是一个地址值,当循环一次地址值也就加1也就是取的下一个下标的地址值,*(arr2 + i)也就是取地址值对应的值。
3.不是说数组是一块连续的内存空间吗?为什么地址值不是连续的呢,看官莫着急看如下代码就略知一二了:
char arr[] = {'H','e','l','l','o'};
int j;
for(j=0; j<5; j++) {
printf("arr[%d]地址=%#x\n",j,&arr[j]);
}
当我们打印char数组的地址值时,地址确实是一个连续的地址。那我们的int数组为什么相差4呢?原因其实很简单,char在内存中占一个字节所以而int所占的是4个字节。这就是为什么int数组的地址值都相差4了。
4.这里在提一点:就是数组的地址值等于数组第一个元素的地址值
int arr2[] = {1,5,36,9,0};
//取arr2的内存地址值
printf("arr2地址=%#x\n",&arr2);
//取arr2[0]内存地址值
printf("arr2[0]=%#x\n",&arr2[0]);
三:让用户从控制台输入一个数组,并打印至控制台
#include<stdio.h>
#include<stdlib.h>
/**
* 用户输入数组
*1.用户输入数组的长度
*2.根据用户输入的长度创建数组
*3.让用户输入数组的值
*4.把数组内容打印出来
*/
main() {
int length;
printf("请输入数组长度:\n");
//获取用户输入数组的长度
scanf("%d",&length);
//根据用户输入的长度创建数组
int arr[length];
int i;
for(i=0; i<length; i++) {
printf("请输入arr[%d]的值:\n",i);
//循环获取控制台的内容
scanf("%d",&arr[i]);
}
//把数组内容打印出来
for(i=0; i<length; i++) {
printf("arr[%d]=%d\n",i,arr[i]);
}
system("pause");
}
好了学到这里,我们差不多就把脚迈进了C语言的大门,学习新知识还是要多练多看,这样才能加深印像记得更加牢固。睡觉喽!
Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组的更多相关文章
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- Android jni 编程4(对基本类型二维整型数组的操作)
Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...
- Android JNI学习(四)——JNI的常用方法的中文API
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android jni 编程(参数的传递,成员,方法的)相互访问
package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.u ...
- C语言中数据类型的取值范围
C语言中数据类型的取值范围如下:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 ...
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址 内存地址就是指针. ...
- Android JNI编程(二)——C语言的基本数据类型,输出函数,输入函数
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 在学习C语言数据类型之前,我们先来回顾一下Java中的基本数据类型和其特点 ...
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
随机推荐
- go reflect 调用方法
package main import ( "fmt" "reflect" ) type A struct { } func (A) Test() { fmt. ...
- AJAX - 封装AJAX GET 数组join( )方法 键值对取value POST请求参数注意点
function objToStr(obj){ obj.t = new Date().getTime(); // 给obj动态增加了一个属性 // 这个给对象添加属性的方法, 会被直接加到键值对里?? ...
- BZOJ4044: [Cerc2014] Virus synthesis(回文树+DP)
Description Viruses are usually bad for your health. How about fighting them with... other viruses? ...
- django 简单会议室预约(5)
再来看看views.py的后半部分,对数据库的增删改查 #获取学院列表 def get_acad_list(): room_list = ConfeRoom.objects.all() #对数据库的操 ...
- CISP/CISA 每日一题 16
CISA 每日一题(答) 作业调度软件的优点: 1.作业信息仅需建立一次,减少错误发生概率: 2.可定义作业间的依赖关系,当某一项作业失败时,依赖于该作业的后续作业就不会被执行: 3.所有成功或失败的 ...
- 【Educational Codeforces Round 35 B】Two Cakes
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从小到大枚举x. 看看a/x+b/x是不是大于等于n 是的话. 看看是不是两种蛋糕都能凑一堆. 也即x的最大枚举量是min(a,b) ...
- 【2017"百度之星"程序设计大赛 - 初赛(A)】度度熊的01世界
[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=775&pid=1006 [题意] 在这里写题意 [题 ...
- 读书笔记-Java设计模式
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java的封装性很好,拿访问控制符来讲,没有权限的类或方法是不能访问的.如public,都可访问:p ...
- Python3的取余操作
https://blog.csdn.net/u014647208/article/details/53368244 取余代码: 输入以下代码: >>>10%2 >>> ...
- vuepress折腾记
由于格式比较乱,所以直接拿图片粘贴过来了,详情请看原文链接https://lewiscutey.github.io/blog/blog/vuepress-theme-toos.html