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/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
随机推荐
- 36.Node.js 工具模块--OS模块系统操作
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模 ...
- 35.Node.js GET/POST请求
转自:http://www.runoob.com/nodejs/nodejs-module-system.html 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器 ...
- Filebeat之input和output(包含Elasticsearch Output 、Logstash Output、 Redis Output、 File Output和 Console Output)
前提博客 https://i.cnblogs.com/posts?categoryid=972313 Filebeat啊,根据input来监控数据,根据output来使用数据!!! Filebeat的 ...
- mycat基本概念及读写分离一
mycat基本概念及读写分离一 目录(?)[+] 安装与启动 mycat目录介绍 mycat三个最重要配置文件 验证读写分离 安装与启动 linux下可以下载Mycat-server-xxxxx.li ...
- Eclipse使用方法和技巧二十七:定义自己的高速联想词
某天在调试代码的时候.尽管是android的project还是习惯的输入syso.然后在ALT+/一下. 旁边的同事就问了一下,这个log打印输出的tag是什么. 接着又问了为什么syso可以智能联想 ...
- 18. springboot整合jsp
转自:https://blog.csdn.net/u012562943/article/details/51836729
- uiautomator_python使用汇总
1.判断按钮状态 if d(resourceId="id",enabled=False): #判断当前按钮是否为未激活状态,为True则为激活状态2.获取toast提示语 d.to ...
- Linux中top命令参数详解
此文摘自(https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html) 简介 top命令是Linux下常用的性能分析工具,能够实 ...
- 【例题 7-7 UVA - 1354】Mobile Computing
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 秤砣都是在叶子节点. 可以把它看成一个二叉树. 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以 ...
- (转)windows 下 Java 及 Python 环境变量设置
转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyes ...