指针数组

js 算法,数组排序

心已入冬 提交于 2019-12-06 06:40:57
冒泡排序。给数组按数字从小到大依次排序 arr = [1, 6, 7, 8, 9, 5, 18]; //最外层指针i从左到右依次循环指向,当最内层的指针循环一圈后,指针i才指向下个位置 //最内层指针j从右到左依次指向,不超过i指针的位置,并计较当前指向的值和下个值的大小,并按大小进行交换位置。如下图所示 let arr = [1, 6, 7, 8, 9, 5, 18]; for (i = 0; i < arr.length - 1; i++) { for (j = arr.length - 1; j > i; j--) { if (arr[j - 1] > arr[j]) { [arr[j - 1], arr[j]] = [arr[j], arr[j - 1]]; } } } console.log(arr);// [1, 5, 6, 7, 8, 9, 18] 来源: https://www.cnblogs.com/yt0817/p/11965957.html

C语言博客作业05--指针

梦想的初衷 提交于 2019-12-06 06:36:13
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 1.如果事先无法确定需要处理的数据数量,有两种处理方法:一种方法是估计一个上限,并将该上限作为数组长度,但是这样常常会造成空间浪费;另一种方法是利用指针来实现存储空间的动态分配 2.使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针可以返回多个值 3.一般数据是按照“地址”存取的 4.程序执行时将变量翻译为它所在的内存地址来进行操作,这种使用变量的方法叫做“直接访问”,直接访问一般以内存单元的第1个字节的地址作为它的地址 5.在C程序中还有一种使用变量的方法,即通过变量的地址进行操作,用指针访问内存和操纵地址,比如再定义一个变量来专门存放另一个变量的地址,这种方法称为“间接访问” 6.在C语言中把专门用来存放变量地址的变量称为“指针变量”,简称为指针 7.指针是用来存放内存地址的变量,如果一个指针变量的值是另一个变量的地址,就称该指针变量指向那个变量 8.&n表示变量n的内存地址或存储位置,&被称作地址运算符,&是一元运算符,与其他的一元运算符有同样的优先级和从右到左的结合性 9.定义指针的一般形式为: 类型名 * 指针变量名 ps:* 指的是指针声明符 10.在许多场合,可以把指针变量简称为指针,但实际上指针和指针变量在含义又上存在一定的差异,一般来说,在C语言中,指针被认为是一个概念

C博客作业05--指针

强颜欢笑 提交于 2019-12-06 06:36:08
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 指针与指针变量的概念 指针:内存中的一个存储单元的地址,即内存单元的编号 指针变量:声明一个变量并使用地址作为该变量的值,即一个能存放地址值的变量,通过它存放的地址值能 间接访问 它所指向的内容 指针变量的定义、使用方法、初始化 定义:类型名 指针变量名。例如 : char p;int *p ; 指针变量的类型应与其所指向内容类型一致 使用方法:使指针变量指向某个变量,(即将某变量的地址值赋给指针变量)。例如:int x; int *p=&a; 使用指针变量时必须先赋值后引用,没有被赋值的指针是野指针,它所指向的内容无法确定 初始化:int a;int *p; p=&a; 指针变量不能被赋值,不能直接让指针指向整型数据,指针代表的是一个变量的地址。(可以将0或者NULL赋给指针,但是有的系统不支持赋0) 指针运算的优先级与结合性 &a等同于a,均代表内容; & p等同于&a,均代表地址。(单目运算符优先级是相同的,但从右向左结合。) p++等同于 (p++),代表的是内容。 ( p)++与 (p++)的区别:前者是指针p所指向的内容自增相当于a++,而后者是运算完p所指向的内容后将指针向下移了一个位置 指针与动态内存分配 我们以往的定义如 :int a[10]; int b等等都是系统的静态内存分配

C语言第八讲,指针*

ぃ、小莉子 提交于 2019-12-06 06:35:56
C语言第八讲,指针*             C语言第八讲,指针* 一丶简单理解指针 说到指针,很多人都说是C语言的重点. 也说是C语言的难点. 其实指针并不是难.而是很多人搞不清地址 和 值.以及指针类型. 为什么这样说. 假设有两个变量,如下 int nNum1 = 1; int nNum2 = 0x00401000; 变量nNum1 保存的值是1 变量nNum2 保存的是一个16进制数值. 那么如果我们把保存16进制的这个变量.当作指针. 也就是说它保存了一个16进制数值而已. 我们可以通过16进制找到里面存储的值. 但是因为是保存地址的变量.所以我们需要加上特殊符号进行定义. 例如:    int *nNum2 = 0x004010000; 指针其实就是保存了一个特殊的数值而已. 而通常这个数值我们说是地址. 如果我们保存了1的地址,那么我们就可以访问1了. 怎么访问? 可以通过取内容符号进行访问. int nNum = 1; int *p = &nNum1; //保存1的地址,我们可以不用管.也可以理解为一个16进制数值而已. *p = 3; //修改地址空间的值. 二丶指针的数据类型 说到指针.其实我们说的并不是保存地址的难点.难点是该如何解释这个地址. 例如我们知道定义一个变量.我们可以知道这个变量的内存空间跟随这数据类型走. 例如:    int nNum1 = 3

C语言博客作业05——指针

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 06:35:24
0.展示PTA总分 1.本章学习总结 1.1学习内容总结 a.地址和指针 在C语言中,指针被认为是计算及内存地址的代名词之一,指针变量本身就是变量,本身有一个地址,不同的是指针的 内容是地址 ,即存放的是地址。指针中有两个重要的符号,即 和&,其中 号第一次使用的时候,是用来定义一个指针变量,第一次使用后,再次使用,则表示这个指针的内容,也就是某个地址,而&号则是表示取地址的意思,在scanf()函数里,则是我们对&号的第一次接触,就是取地址的意思。 b.指针的定义 int *p;//用*表示定义一个指针变量,p就是一个指针。 int i; char *cp; p=NULL; cp=&i; Tip:指针变量被定义后,必须将指针变量和一个特定的变量进行关联后才可以使用它,不能在没有指向具体的某个变量情况下,对指针进行操作。 c.指针的基本运算 *p++ 先将*p作为表达式的值,再将指针p的值加一,运算后,p不在指向变量a,即*p=*(p+1)。 表达式 *(p++)和 *p++等价。 ++*p - ++*p的意思是将p所指的变量的值加一,和 *p= *p+1,( *p)++表示的意思是一样的。 指针的赋值运算 指针之间的赋值运算必须是同类型的 利用指针计算数组元素的个数和数组元素的存储个数 double *p,*q; double a[2]; p=&a[0]; q=p+1;

C博客作业05—指针

落爺英雄遲暮 提交于 2019-12-06 06:29:16
0.展示PTA总分(0----2) 展示关于“指针题目集”分数截图。 1.本章学习总结(2分) 1.1 学习内容总结 (1) 指针做循环变量做法 #include<stdio.h> void main() { int arr[]={6,4,3,5,8,1}; int len = sizeof(arr); for(int i=0;i<len;i++) { printf("%d\n",arr[i]);//常规遍历方式 } for(int i=0;i<len;i++) { printf("%d\n",*(arr+i));//使用arr指针遍历方式 } int *p_arr=arr; for(int i=0;i<len;i++) { printf("%d\n",*(p_arr+i));//额外使用新指针来遍历数组 printf("%d\n",*p_arr++);//额外使用新指针来遍历数组 } } (2) 字符指针如何表示字符串 C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中。字符数组归根结底还是一个数组,当然关于指针和数组的规则同样也适用于字符数组。举一个例子: #include <stdio.h> #include <string.h> int main(){ char str[] = "asdfghjkl"; char *pstr = str; int len =

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

£可爱£侵袭症+ 提交于 2019-12-06 06:25:40
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 1.2 本章学习体会 学习感受 代码量统计 2.PTA实验作业 2.1 PTA题目1 2019-c10-指针 6-9 合并两个有序数组(2) 要求实现一个函数merge,将元素个数为m的升序数组a和长度为n的升序数组b合并到数组a,合并后的数组仍然按升序排列。假设数组a的长度足够大。 2.1.1 伪代码 void merge(int* a, int m, int* b, int n) 定义循环变量i, j, k, 并赋值i = m - 1; j = n - 1; k = m + n - 1; 定义指针c int *c 申请空间c = (int*)malloc((m + n) * sizeof(int)); while i >= 0 && j >= 0 if a[i] > b[j] then c[k--] = a[i--]; else c[k--] = b[j--]; while i >= 0 c[k--] = a[i--]; while j >= 0 c[k--] = b[j--]; for i = 0 to m+n-1 do a[i] = c[i]; free(c); 2.1.2 代码截图 2.1.3 造测试数据 2.1.4 PTA提交列表及说明 Q1:编译错误 A1:编写代码时忘记加分号 Q2:部分正确 A2

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

為{幸葍}努か 提交于 2019-12-06 04:43:31
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 指针做循环变量可将地址做为循环变量,从首地址递增到尾地址。 字符指针表示字符串只需要将指针指向字符串的首地址。 动态分配内存可减少内存的浪费,具体方法可用malloc和calloc函数实现,后者还可以自动为申请的内存赋初值0,需要注意使用函数后需要强制类型转换,如:p=(char )malloc(n sizeof(a))等。 指针数组中存放的是地址,数组名是二级指针。对字符串的存放可以用到指针数组。 二级指针是指向指针的指针,行指针也是一种二级指针。指针数组和二维数组属于二级指针。 指针函数的函数返回值是指针(地址)。 1.2 本章学习体会 指针较前几章内容更加难以理解,指针的使用也经常出现各种问题,编译运行时也会出现很多报错,对指针的使用时机也不好把握。 两周代码量:710行。 2.PTA实验作业 2.1查找子串 2.1.1 伪代码 int i = 0; int j; while (s[i] != '\0') //主串遍历 { j=1; if (s[i] == t[0])//主串遇到子串的首字符 { 主串和子串继续比对直到子串结束或者二者不相等 如果子串比对到结束符说明找到了,返回子串在主串的首地址 } i++; } 没找到则返回空指针 2.1.2 代码截图 2.1.3 总结本题的知识点 1.掌握主串和子串同时遍历比较

c++指针和自由存储空间

耗尽温柔 提交于 2019-12-06 03:37:06
指针和自由存储空间 打印地址时使用16进制表示 使用指针比使用数组好的一点是数组大小在编译阶段就要确定好,而指针指向的空间大小可以在运行阶段确定好。可以使得程序更加灵活。 int * ptr;表示声明一个指针。 每声明一个指针都需要在前面加*。 指针变量不仅仅是一个指针,而且是一个指向特定类型的指针。 指针变量本身的长度是相同的。例如:char 和 double类型的指针长度相同。 c++创建指针时,只分配地址所占用的内存。而不分配指针所指向的数据的内存。数据的内存需要自己显式的分配。 在操作指针指向的数据之前,先为指针初始化一个合适的确定的地址。 c++中如果将一个int型值直接赋给指针类型(就算那个值很像地址值),编译器将显示类型不匹配的错误信息。如果要将int值赋给一个指针使用应当使用强制类型转换。 int * pt; pt = (int *) 0xB8000000; 指针在运行阶段的内存空间分配 c语言中使用malloc()分配内存。 c++中使用new分配内存。 new会找到一个长度正确的内存块,并返回该内存的地址。 int * pn = new int; new分配内存卡通常与常规变量分配的内存块不同。 常规变量存储在被称为栈的内存区域中,new分配的内存在堆中。 计算机可能因为没有足够的内存而无法满足new请求。这种情况下new将引发异常。 c+

C语言入坑指南-数组之谜

老子叫甜甜 提交于 2019-12-06 03:35:34
前言 在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。 数组回顾 在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们说明,假设有以下数组声明: int a[5]; char b[] = "hello"; 数组大小必须在编译期就作为一个常数确定下来。 但C99中引入了变长数组,允许数组的维度是表达式 ,但在数组分配内存时,其表达式的值可以被求出。 数组下标运算实际上都是通过指针进行的,也就是说a[4]与*(a+4)是等价的,甚至你会发现和4[a]也是一样的。 数组名一般代表了指向该数组下标为0的元素的指针,并且printf("%s\n",hello)与printf("%s\n",&hello[0])等效。 数组和指针不相等 考虑下面的声明: int c[4];//假设int占4字节 int *d; 对于上面的声明,编译器会给c预留内存空间4*4字节,并且数组名代表着指向数组第一个元素的指针。但对于d,却只为指针本身保留了内存空间。 所以此时有下面的操作: c[3]; //合法 *(c+3); //合法 *d; //不合法,d指向了内存中不确定位置 c++; //不合法,一维数组名是指针常量,常量不能被修改掉 d++; //可通过编译 另外,下面的两种情况也是不一样的: