指针数组

php array 处理函数

不打扰是莪最后的温柔 提交于 2019-12-09 16:57:27
current current -- 返回数组中的当前单元 说明 mixed current ( array &array ) 每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。 current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。 如果内部指针指向超出了单元列表的末端, current() 返回 FALSE 。 警告 如果数组包含有空的单元(0 或者 "",空字符串)则本函数在碰到这个单元时也返回 FALSE 。 这使得用 current() 不可能判断是否到了此数组列表的末端。 要正确遍历可能含有空单元的数组,用 each() 函数。 例 1. current() 及相关函数的用法示例 <?php $transport = array( 'foot' , 'bike' , 'car' , 'plane' ); $mode = current ( $transport ); // $mode = 'foot'; $mode = next ( $transport ); // $mode = 'bike'; $mode = current ( $transport ); // $mode = 'bike'; $mode = prev ( $transport ); // $mode = 'foot'; $mode = end

Golang 中的指针 - Pointer

不想你离开。 提交于 2019-12-09 11:22:58
Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, func 。 相比 Java,Python,Javascript 等引用类型的语言,Golang 拥有类似C语言的指针这个相对古老的特性。但不同于 C 语言,Golang 的指针是单独的类型,而不是 C 语言中的 int 类型,而且也不能对指针做整数运算。从这一点看,Golang 的指针基本就是一种引用。 那么 Golang 为什么需要指针?这种指针又能有什么独特的用途呢? 在学习引用类型语言的时候,总是要先搞清楚,当给一个函数/方法传参的时候,传进去的是值还是引用。实际上,在大部分引用型语言里,参数为基本类型时,传进去的大都是值,也就是另外复制了一份参数到当前的函数调用栈。参数为高级类型时,传进去的基本都是引用。这个主要是因为虚拟机的内存管理导致的。 内存管理中的内存区域一般包括 heap 和 stack, stack 主要用来存储当前调用栈用到的简单类型数据:string,boolean,int,float 等。这些类型的内存占用小,容易回收,基本上它们的值和指针占用的空间差不多,因此可以直接复制,GC也比较容易做针对性的优化。

sizeof和sizeof(string)的问题

删除回忆录丶 提交于 2019-12-07 14:31:11
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果: string strArr1[]={"Trend", "Micro", "Soft"}; sizeof(strArr1)=12 转自: http://apps.hi.baidu.com/share/detail/30398570 关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论: string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是VC6.0测试后sizeof(string)=16.还是跟编译器有关 #include<iostream> using namespace std; void main(void) { string a[] = {"aaaaa","bbbb","ccc"}; int x =

并归排序(数组+链表)

江枫思渺然 提交于 2019-12-06 13:04:39
     并归排序与快速排序相似,靠分治思想突破了排序算法 O(n 2 ) 的瓶颈。   我们看回顾一下几大排序算法的时间、空间复杂度: 排序算法 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定 冒泡排序 O(n2)O(n2) O(n2)O(n2) O(1)O(1) 是 选择排序 O(n2)O(n2) O(n2)O(n2) O(1)O(1) 不是 直接插入排序 O(n2)O(n2) O(n2)O(n2) O(1)O(1) 是 归并排序 O(nlogn)O(nlogn) O(nlogn)O(nlogn) O(n)O(n) 是 快速排序 O(nlogn)O(nlogn) O(n2)O(n2) O(logn)O(logn) 不是 堆排序 O(nlogn)O(nlogn) O(nlogn)O(nlogn) O(1)O(1) 不是 希尔排序 O(nlogn)O(nlogn) O(ns)O(ns) O(1)O(1) 不是 计数排序 O(n+k)O(n+k) O(n+k)O(n+k) O(n+k)O(n+k) 是 基数排序 O(N∗M)O(N∗M) O(N∗M)O(N∗M) O(M)O(M) 是   早期的排序算法总是免不了元素间的一一比较,因此时间复杂度很难突破 O(n 2 ) 。而并归排序采用分治的思想将问题的规模缩小,使用小问题的解来解决大问题,并由此突破了 n 2 的诅咒。  

5.3.5 堆

一世执手 提交于 2019-12-06 10:55:37
Java对象中包含的基本数据由它所属的类及其所有超类声明的实例变量组成。只要有一个对 象引用,虚拟机就必须能够快速地定位对象实例的数据。另外,它也必须能通过该对象引用访 问相应的类数据(存储于方法区的类型信息)。因此在对象中通常会有一个指向方法区的指针。 —种可能的堆空间设计就是,把堆分为两部分:一个句柄池,一个对象池,如图5-5所示。 而一个对象引用就是一个指向句柄池的本地指针。句柄池的每个条目有两部分:一个指向对象 实例变量的指针, 一个指向方法区类型数据的指针。这种设计的好处是有利于堆碎片的整理, 当移动对象池中的对象时,句柄部分只需要更改一下指针指向对象的新地址就可以了——就是,句柄池中的那个指针。缺点是每次访问对象的实例变量都要经过两次指针传递。这种对象表示的方法在图5-5中绘出。第9章有一个这种堆的交互演示一HeapOfFish applet。 另一种设计方式是使对象指针直接指向一组数据,而该数据包括对象实例数据以及指向方 法区中类数据的指针。这样设计的优缺点正好与前面的方法相反,它只需要一个指针就可以访 问对象的实例数据,但是移动对象就变得更加复杂。当使用这种堆的虚拟机为了减少内存碎片 而移动对象的时候,它必须在整个运行时数据区中更新指向被移动对象的引用。图5-6描绘了这种表示对象的方法。 象是否的确是被引用的对象或者它的超类型。当程序在执行instanccof操作时

JNI 技巧

狂风中的少年 提交于 2019-12-06 08:28:04
JNI 是指 Java 本地层接口(Java Native Interface)。它为用 Java 语言编写的受控代码定义了一种与本地层代码(用 C/C++ 编写)交互的方式。它是厂商无关的,其支持从动态共享库加载代码,尽管有时笨重,但它仍是有效的。 如果你对它还不熟悉,可以阅读 JNI规范(Java Native Interface Specification) 来获得对它的更多了解,了解 JNI 如何工作以及它有哪些功能。规范中有些地方的说明,并不是特别的清晰简洁明了,因而接下来的一些内容也许有点用。 JavaVM 和 JNIEnv JNI 定义了两个关键的数据结构, JavaVM 和 JNIEnv 。它们都是指向函数表的指针。(在 C++ 版本中,它们是类,其中包含一个指向函数表的指针,及每个 JNI 函数对应一个的成员函数,这些成员函数则简单地调用函数表中的对应函数。) JavaVM 提供了“调用接口”函数,通过这些函数,可以创建和销毁一个 JavaVM。看一下 JavaVM 结构的定义就一目了然了: # if defined(__cplusplus) typedef _JavaVM JavaVM; # else typedef const struct JNIInvokeInterface* JavaVM; # endif /* * JNI invocation

JNI 实战全面解析

倖福魔咒の 提交于 2019-12-06 08:22:51
简介 项目决定移植一款C++开源项目到 Android 平台,开始对JNI深入研究。 JNI是什么? JNI( Java Native Interface)意为 Java 本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。 NDK是什么? Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。 为什么要用NDK? 1、安全性,java是半解释型语言,很容易被反汇编后拿到源代码文件,我们可以在重要的交互功能使用 C语言 代替。 2、效率,C语言比起java来说效率要高出很多。 JNI和NDK的区别? 从工具上说,NDK其实多了一个把.so和.apk打包的工具,而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。 从编译库说 , NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件。 从编写方式说, 它们 一样。 详解 1、JNI 元素 1、JNI组织结构 JNI函数表的组成就像C++的虚函数表,虚拟机可以运行多张函数表。 JNI接口指针仅在当前线程中起作用,指针不能从一个线程进入另一个线程,但可以在不同的线程中调用本地方法。 2、原始数据 Jobject 对象 引用类型 Java类型

C博客作业05--2019-指针

蹲街弑〆低调 提交于 2019-12-06 06:41:29
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 指针变量的定义 如果在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量。定义指针变量的一般形式为:类型名 *指针变量名,例如: int *p 。指针变量名时指针变量的名称,必须是一个合法的标识符。 指针的基本运算 取地址运算符&用于取地址,间接访问运算符*用于取内容,例如: p=&a , p=*a . 赋值运算符=可以在指针之间互相赋值,例如: p1=&a,p2=p1 。 字符串处理函数 函数名 函数功能 getchar 从标准输入文件读入一个字符 putchar 输出一个字符 puts 把字符串s输出到标准输出文件,'\0'转换为'\n'输出 fgets 从fp所指文件中最多读n-1个字符(遇到'\0'.^z终止)到字符串s中 strcat 把字符串t连接到s,是s成为包含s和t的结果串 strcmp 逐个比较字符串s和t中的对应字符,直到对应字符不等或比较到串尾 strcpy 把字符串t复制到s中 strlen 计算字符串s的长度(不包括'\0') strstr 在字符串s中查找字符串t首次出现的地址 内存动态分配相关函数 函数名 函数功能 malloc 申请空间并返回首地址 calloc 申请空间并返回首地址,而且将存储块初始化为0 realloc 更改以前的存储分配 free 释放申请得来的空间

C博客作业05--2019-指针

心不动则不痛 提交于 2019-12-06 06:41:19
0.展示PTA总分(0----2) 1.本章学习总结(2分) 1.1 学习内容总结 指针的定义:类型名 指针变量名;内存地址一般都是用16进制数表示;&表示地址运算符,例如p =&x;是将变量x 的地址存储在p 中;指针变量的类型是指它所指向的变量的数据类型,必须将指针变量和一个特定的变量进行关联后才可以使用它,指针变量必须先赋值; p++不再是指向原来的那个向量,而是一个新向量,* p ++等价与 ( p ++);只能把一个指针的值赋给另一个相同类型的指针;对于指针的函数调用,实参是地址,传递的是地址,用指针类型形参接受该变量的地址;学到了冒泡法排序的代码;数组名本身是一个地址即指针值,数组名的地址也是数组第一个元素的地址,数组名可以使用指针形式,而指针变量也可以转换为数组形式;指针的算术运算只包括两个相同类型的指针相减以及指针加上或减去一个整数,其他的操作如指针相加、相乘和相除,或指针加上和减去一个浮点数都是非法的;还学到了二分法查找的方法,sum函数的使用;字符的输入,可以有scanf(“%s”,str);gets(str);fgets(str,10,stdin);以及其他输入方式,字符的输出,可以有printf(“%s”,str);puts(str);printf(“%s”,“hello”);以及其它输出方式。字符数组与字符指针之间的转换关系。常用的字符串处理函数,头文件是

C博客作业05--指针

左心房为你撑大大i 提交于 2019-12-06 06:41:15
0.展示PTA总分 1.本章学习总结 1.1学习内容总结 指针变量的定义 类型名: *指针变量名 例如: int *p;//定义一个整型变量p,指向整型变量; 指针和数组的赋值与初始化 一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。 如: int p[5]; p=p+1; //错误 而p[0]=1; //正确 // int *p; p=p+1; //正确 p[0]=1;//错误,指针没有初始化; // int i; int *p=&i; p[0]=1;//正确 对于字符指针还有比较特殊的情况。 如: char * p="abc"; p[0]='d';//错误 指针做循环变量做法 例如:对数组元素求和 int a[100]; int *p; int sum=0; p=a; for(p=a;p<=&a[99];p++) { sum+=*p; } 在循环中,指针变量p的初值是数组a的基地址,P连续取值&a[0],&a[1],…&a[99]。 字符串指针如何表示字符串 对指向字符变量的指针变量应赋予该字符变量的地址。 例如: char c, *p=&c;//表示p是一个指向字符变量c的指针变量。 char *s="apple";//表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。 用字符串指针指向一个字符串。