指针

双边循环法下的快速排序

北城余情 提交于 2020-01-15 03:52:11
(1)选定基准元素pivot,并且设置两个指针left和right,指向数列的最左和最右边两个元素。 (2)接下来进行第一次循环,从right指针开始,让指针所指向元素和基准元素做比较。如果大于或者等于pivot,则指针向左移动;如果小于pivot,则right指针停止移动,切换到left指针。 (3)left指针移动时,让指针所指向的元素和基准元素作比较。如果小于或等于pivot,则指针向右移动;如果大于pivot,则left指针停止移动。 (4)直到left指针和right指针重合,将基准元素pivot与指针重合处所指向内容交换。第一轮交换结束。具体代码如下所示 package com.company; import java.lang.reflect.Array; import java.util.Arrays; public class quickSort { public static void quickSort(int[] arr,int startIndex,int endIndex) { // 递归结束条件:startIndex大于或者等于endIndex时 if(startIndex>=endIndex){ return; } //得到基准元素位置 int pivotIndex=partition(arr,startIndex,endIndex); /

文件操作进阶(读写文件、遍历目录、统计目录大小)

≯℡__Kan透↙ 提交于 2020-01-15 03:51:39
文件指针 若要使用文件指针方式进行操作,需要先打开文件,创建文件指针,然后使用指针进行读写,最后操作完成后关闭文件。 1、打开文件 fopen ( $filename , $mode ) $filename表示打开的文件路径,不仅可以是本地文件,还可以是HTTP或FTP协议的URL地址;$mode表示文件打开的模式 2、关闭文件 fclose ( $handle ) $handle表示fopen函数成功打开文件时返回的文件指针。如果文件关闭成功返回true,失败返回false 3、读取文件 fread ( $handle , $length ) 用于读取指定长度的字符串。$length用于指定读取的字节数。该函数在读取到$length指定的字节数,或读取到文件末尾时就会停止读取,返回读取到的内容。当读取失败时返回false 当使用fread函数读取文件时,会影响文件指针指向文件的位置。通过ftell函数可以返回当前文件指针的位置,通过rewind()函数可以倒回文件指针的位置 fgetc ( $handle ) 用于在打开的文件中读取一个字符,该函数每次只能读取一个字节,如果遇到EOF时,返回false fgets ( $handle [ , $length ] ) 用于读取文件中的一行。$length用于指定读取的字节数,该函数从文件中读取一行,并返回长度最多为$length

数组指针、指向函数指针数组的指针与 typedef 的用途

☆樱花仙子☆ 提交于 2020-01-14 20:05:50
目录 一、对指针的认识 二、转载“浅谈 数组指针 指针数组 函数指针 函数指针数组... 以及它们之间区别。” 三、转载“typedef” 一、对指针的认识 指针仅仅是一个变量,变量名是由字母数字下划线组成的一个字符串,其他的 * () [] 等均不是指针变量名的一部分,而是表明指针指向的类型,是对指针的约束,表明该指针只能指向某种类型的数据。 典型例子如: // 变量定义一 void (*p)(int, char*); // 变量定义二 typedef void (*pFunc)(int, char*); pFunc p; 变量定义一 定义了一个指向 “ ①有两个参数且参数类型分别为int和char* ②函数的返回值类型为void 的函数” 的指针变量,变量名为 p 变量定义二 先把上述数据类型声明为 pFunc,然后用 pFunc 定义一个变量 p 这两种定义方法是等价的。 下面转载两篇对认识指针很有帮助的两篇文章。 二、转载“浅谈 数组指针 指针数组 函数指针 函数指针数组... 以及它们之间区别。”作者 tp_16b 阅读目录 数组指针 指针数组 函数指针 函数指针数组 指向函数指针数组的指针 【写在前面】 首先,先说明一个关系: 数组和指针是没关系的! 数组名和指针的概念 区别 :   数组名和指针虽都代表数组首元素的地址,但 意义不同。   网上有个举得比较好的例子

聊一聊堆、栈与Go语言的指针

非 Y 不嫁゛ 提交于 2020-01-14 18:57:09
堆、栈与指针 前言 堆、栈在计算机领域是亘古不变的热门话题,归根结底它们和编程语言无关,都是操作系统层面的内存划分,后面尝试简单地拆开这几个概念,谈谈我对它们的理解。 栈 每个函数中每个值在栈中都是独占的,不能在其他栈中被访问。每个方法片(function frame)都有一个自己的独享栈,这个栈的生命周期随着方法开始结束诞生与消逝,在方法结束时候会被释放掉,较之于堆,栈的优势是比较轻量级,随用随弃,存活期跟随着函数。 堆 通俗的讲,假如说栈是各个函数的一栋私人住宅,堆就是一个大型的人民广场,它可以被共享。堆作为一个全局访问块,它的空间由GC(拆迁大队)管理。 The heap is not self cleaning like stacks, so there is a bigger cost to using this memory. Primarily, the costs are associated with the garbage collector (GC), which must get involved to keep this area clean. 翻译过来,区别于栈在函数调用结束时候就释放掉,堆不会自动释放,堆空间的释放主要来自于垃圾回收操作。 GC(Garbage collection) 垃圾回收, 垃圾回收具有多种策略,一般来说,每一个存在于堆中

定义指针字符

孤者浪人 提交于 2020-01-14 17:51:53
定义指针字符 字符串常量是用一对双引号括起来的字符序列,与基本类型常量的存储类似。字符串常量是一串字符,通常被看作一个特殊的一维数组,与数组的存储类似,字符串常量中的所有字符在内存中连续存放。所以,系统在存储一个字符串常量是先给定一个起始地址,从该地址指定的存储单元开始,连续存放给字符串中的字符。也就是说,字符串常量实质上是一个指向该字符串首字符的指针常量。 如果定义一个字符指针接收字符串常量的值,,该指针就指向字符串的首字符。 那么如何定义指针字符呢? 指针要先赋值后引用,因为指针中存放的是地址,没有对它赋值,它就不知道指向谁,所以输入的字符也就不知道存放在哪里,因此在输入字符之后字符所存放的空间实际上是不知道的,如果它输入的空间中已经有其他数据了,那么这些数据就会被新输进来的数据覆盖,所以会导致出错。 char * s ; scanf ( "%s" , s ) ; //没有赋值便直接引用 char * s , str [ 20 ] ; s = str ; scanf ( "%s" , s ) ; //先赋值后引用 来源: CSDN 作者: 不想当菜的菜鸡 链接: https://blog.csdn.net/weixin_42371679/article/details/103973053

基本算法——快速排序(左右指针法)

人走茶凉 提交于 2020-01-14 16:47:27
注:使用左右指针时,如果选择数组左边为标准点,则需要先移动右边指针 一、算法核心思想 不断将一个数组中 大 的数放在选取的标准数 右边 ,比标准数 小 的放在标准数 左边 (一般情况,当然你可以小的放左边大的放右边) 二、图解 三、代码 /** * 快速排序 前后指针 * 侧重注意,如果是以前面为标准key,需要先从最后开始移动指针 */ public static int[] quickSort2(int[] array, int low, int high){ if(low < high){ //此时设第一个数为key int key = array[low], i = low, j = high; while (i < j){ //从右边开始移动指针 //此时右边的值都大于key,不需要交换,继续指针向前移动 while (i < j && array[j] >= key){ j--; } while (i < j && array[i] <= key){ i++; } if(i < j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } } //交换key和重合指针的值 array[low] = array[i]; array[i] = key; //递归 quickSort2(array, low,

C语言笔记—结构体2

十年热恋 提交于 2020-01-14 09:19:19
C语言笔记—结构体2 1. 结构体操作 1.1 取地址 1.2 传参 2. 结构体指针 3. 结构数组 4. 结构体嵌套 5. 使用结构体 1. 结构体操作 1.1 取地址 struct Point3D { int x ; int y ; int z ; } ; struct Point3D p = { 1 , 2 , 3 } ; printf ( "&p = %p\n" , & p ) ; printf ( "&(p.x) = %p\n" , & p . x ) ; printf ( "&(p.y) = %p\n" , & p . y ) ; printf ( "&(p.z) = %p\n" , & p . z ) ; 结构体名不是结构体变量的地址,必须使用 & 获取地址。 数组名即地址。 1.2 传参 void Print ( struct Point3D p ) { printf ( "(%d,%d,%d)" , p . x , p . y , p . z ) ; } 整个结构体作为参数的值传入函数。这时候在函数内新建一个结构体变量并复制值。结构体可以作为返回值,也是结构体整体复制。 2. 结构体指针 struct Point3D p = { 1 , 2 , 3 } ; struct Point3D * q = & p ; 结构体指针访问成员

第六周作业

瘦欲@ 提交于 2020-01-14 08:58:58
2019年春季第六次作业 这个作业属于哪个课程 C语言程序设计 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888 我在这个课程的目标是 学习指针,方便我找到最大值最小值 这个作业在哪个具体方面帮助我实现目标 指针的基本用法 参考文献 中国大学mooc 6-1 求两数平方根之和 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double a, double b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } /* 请在这里填写答案 */ 输入样例: 12 20 输出样例: y=7.94 我的答案 double fun

C语言指针练习1

戏子无情 提交于 2020-01-14 08:53:40
练习题一、char类型占几字节?char*类型占几字节?int*****占几字节? char类型占1字节,char 类型占4字节,int *****占4字节。 练习题二、char** arr[10] 占多少个字节? char** arr[10] 占40字节 练习题三、 自定义结构体如下: struct Student { int x; int y; }; 第一步: ```c Student**** s; s = (Student****)100; s++; //s的值是多少? s = s+2; //s的值是多少? s = s-3; //s的值是多少? S++等于100+1 4=104 s =s+2 等于104+2 4=112 s =s-3 等于112-2*3=106 第二步: Student * * * * s1 ; Student * * * * s2 ; int x ; s1 = ( Student * * * * ) 200 ; s2 = ( Student * * * * ) 100 ; x = s1 - s2 ; //x的值是多少? x = s1-s2等于(200-100)/4=25 来源: CSDN 作者: oMuZiLi1 链接: https://blog.csdn.net/oMuZiLi1/article/details/103933173

C/C++二维数组名和二级指针

柔情痞子 提交于 2020-01-14 06:33:15
转载 : https://blog.csdn.net/wu_nan_nan/article/details/51741030 作者:吴一奇 1. 指针 1.1 一个指针包含两方面:a) 地址值;b) 所指向的数据类型。 1.2 解引用操作符(dereference operator)会根据指针当前的地址值,以及所指向的数据类型,访问一块连续的内存空间(大小由指针所指向的数据类型决定),将这块空间的内容转换成相应的数据类型,并返回左值。 有时候,两个指针的值相同,但数据类型不同,解引用取到的值也是不同的,例如, char str[] ={0, 1, 2, 3}; /* 以字符的ASCII码初始化 */ char * pc = &str[0]; /* pc指向str[0],即0 */ int * pi = (int *) pc; /* 指针的“值”是个地址,32位。 */    此时,pc和pi同时指向str[0],但*pc的值为0(即,ASCII码值为0的字符);而*pi的值为50462976。或许把它写成十六进制会更容易理解:0x03020100(4个字节分别为3,2,1,0)。我想你已经明白了,指针pi指向的类型为int,因此在解引用时,需要访问4个字节的连续空间,并将其转换为int返回。 2. 数组 2.1 数组名和指针 通常我们认为数组名是一个指针常量(例如,int a[10