版权声明:本文出自阿钟的博客,转载请注明出处: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. Spark MLlib架构解析(含分类算法、回归算法、聚类算法和协同过滤)

    Spark MLlib架构解析 MLlib的底层基础解析 MLlib的算法库分析 分类算法 回归算法 聚类算法 协同过滤 MLlib的实用程序分析 从架构图可以看出MLlib主要包含三个部分: 底层基 ...

  2. MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4

    utf8mb4兼容utf8,且比utf8能表示更多的字符. 关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 因为utf8mb4是utf8的超集

  3. VBS 脚本调用

    https://my.oschina.net/Tsybius2014/blog/602641

  4. mysql数据库忘记密码时如何修改(转)

    当我们忘记mysql数据库密码时我们就无法正常进入数据库,也就无法修改密码,那么这时该怎么修改密码呢,这里教大家一个简单常用修改密码的方式. (如果图简单快速修改密码的话,直接跳过查询步骤,依照图上执 ...

  5. python,寻找班级里面名字最长的人

    寻找班级里面名字最长的人 我有一串字符串人名:names=(' Kunpen Ji, Li XIAO, Caron Li,' ' Dongjian SHI, Ji ZHAO, Fia YUAN Y,' ...

  6. 自己写的Android图表库XCL-Charts一些旧的样例

    话说有了灵感就要抓住,来了兴趣就要去研究它. 所以尽管近期非常忙.但我还是没有丢下Android图表实现的研究.最终如今我的图表库基类 基本上已经有点模样了.不在是小打小闹,而是能依传入參数非常灵活的 ...

  7. Dynamics CRM2016 Web API之Expand related entities &amp; $ref &amp; $count

    本篇介绍两个关于1:N关系中通过主实体取关联子实体的api,这两个api会常常被用到并且比原来的odata方式更加方便.之前假设我们要取主实体下全部的关联实体的记录都是通过Retrieve Multi ...

  8. 快速创建SSH信任实现无密码登录

    1. 生成本机的公私钥匙对[oracle@Oracle11_2 scripts]$ -t rsa Generating public/private rsa key pair. Enter file ...

  9. WGS84与WGS84 Web Mercator

    1. WGS84与WGS84 Web Mercator 1.1 关于WGS1984投影坐标系 UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的. ...

  10. softmax 与 sigmoid & softmax名字的由来

    Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广. 参考:http://blog.csdn.net/u014422406/article/details/52805924 ...