版权声明:本文出自阿钟的博客,转载请注明出处: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语言多级指针、数组取值、从控制台输入数组的更多相关文章

  1. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  2. Android jni 编程4(对基本类型二维整型数组的操作)

    Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...

  3. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  4. Android jni 编程(参数的传递,成员,方法的)相互访问

    package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.u ...

  5. C语言中数据类型的取值范围

    C语言中数据类型的取值范围如下:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 ...

  6. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...

  7. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针. ...

  8. Android JNI编程(二)——C语言的基本数据类型,输出函数,输入函数

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 在学习C语言数据类型之前,我们先来回顾一下Java中的基本数据类型和其特点 ...

  9. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...

随机推荐

  1. 使用SqlBulkCopy进行批量数据插入

    Dim dt As DataTable = New DataTable() dt.Columns.Add("DtCostProductRuleGUID", GetType(Guid ...

  2. Day3晚笔记

    DEV C++扩展栈空间 -Wl,--stack=64000000000 带权二分图匹配 建一个超级源点S,超级汇点T 把左边的点的点权作为权值,连一条S到左边的点的边 把右边的点的点权作为权值,连一 ...

  3. 1.22 Python基础知识 - 正则表达式

    Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re ...

  4. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

  5. BZOJ2716: [Violet 3]天使玩偶(KD-Tree)

    Description Input Output Sample Input 100 100 81 23 27 16 52 58 44 24 25 95 34 2 96 25 8 14 97 50 97 ...

  6. 洛谷 P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...

  7. HDU 1506 Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  8. BZOJ 4555 [Tjoi2016&Heoi2016]求和 (多项式求逆)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4555 题目大意: 给定 \(S(n,m)\) 表示第二类斯特林数,定义函数 \(f(n ...

  9. Fiddler代理配置

     1.下载安装软件Fiddler 2.Fiddler设置HTTPS代理(如果代理的是https请求的需要操作这一步) 打开Fiddler,菜单栏:Tools -> Fiddler Options ...

  10. css的三种表现形式

    1.行内样式(内嵌样式):结构的内部,即写在标签内的样式:写在标签的开始部分内部,style属性当中:<标记 style="样式的属性名1:样式的属性值1:属性名2:属性值2:.... ...