指针数组

关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试

倖福魔咒の 提交于 2019-12-27 17:08:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> csdn上这个写的挺好的,总的来说该参数是用来在命令行编译程序的时候用的,argc是整型,用来统计程序运行时发送给main函数的命令行参数的个数,argv是字符串数组,用来存放指向字符串参数的指针数组。 https://blog.csdn.net/dgreh/article/details/80985928 来源: oschina 链接: https://my.oschina.net/u/4433424/blog/3148195

指针

旧巷老猫 提交于 2019-12-26 18:20:53
前言 这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以我想通过一篇文章来尽可能的讲解指针,以对得起这个文章的标题吧。 为什么需要指针? 指针解决了一些编程中基本的问题。 第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果, 但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。 第二,指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。 第三,有些操作必须使用指针。如操作申请的堆内存。还有: C语言中的一切函数调用中,值传递都是“按值传递(pass by value)”的,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。 指针是什么? 我们指知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。

Java集合---LinkedList源码解析

﹥>﹥吖頭↗ 提交于 2019-12-26 02:32:36
Java集合---LinkedList源码解析 一、源码解析 1、 LinkedList类定义 2、LinkedList数据结构原理 3、私有属性 4、构造方法 5、元素添加add()及原理 6、删除数据remove() 7、数据获取get() 8、数据复制clone()与toArray() 9、遍历数据:Iterator() 二、ListItr 一、源码解析 1、 LinkedList类定义。 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行队列操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。 LinkedList 是非同步的。

数组指针

社会主义新天地 提交于 2019-12-25 03:06:40
int a; int *a=&a; int **ppa=&pa; 类型 数组名[常量] int *a[10] intx[10]指针指向数组 前提 int a[10]; int *pa=a;// int pa=&a[0]; pa+i< >a+i< >&a[i]< >&pa[i] *(pa+i)< > (a+i)< >a[i]< >pa[i] p++; p; p++使p指向下一个元素a[1],然后再执行 p,得到的是下一个元素a[1]的值。 p++ 由于++和 同级运算,他等于*(p++)先引用p的值,实现*p的运算,然后再使p自增1. 来源: CSDN 作者: 键鼠 链接: https://blog.csdn.net/ilanyangyang/article/details/103687724

Go语言基础介绍

前提是你 提交于 2019-12-25 01:07:12
Go是一个开源的编程语言。Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。目前,Go最新发布版本为1.10. Go语言可以运行在Linux、FreeBSD、Mac OS X和Windows系统上。 1. 结构:Go语言的基础组成有以下几个部分:包声明、引入包、函数、变量、语句&表达式、注释。 (1)、必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main (2)、注释与C++相同,有单行注释即”//”和多行注释即”/* … */”两种。 (3)、当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出;标识符如果以小写字母开头,则对包外是不可见的,但是它们在整个包的内部是可见并且可用的。 2. 基础语法: (1)、Go标记:Go程序可以由多个标记组成,可以是关键字、标识符、常量、字符串、字符。 (2)、行分隔符:在Go程序中,一行代表一个语句结束。每个语句不需要像C++语言一样以分号”;”结尾,因为这些工作都将由Go编译器自动完成。如果你打算将多个语句写在同一行,它们必须使用”;”为区分,但在实际开发中我们并不鼓励这种做法。 (3)、注释:注释不会被编译,每一个包应该有相关注释。单行注释以”//

动态数组(一维二维)探秘

隐身守侯 提交于 2019-12-24 18:38:12
因为做leetcode的一道算法题 https://leetcode-cn.com/problems/regular-expression-matching/ ,需要用到二维数组,结果自己在理解和使用上有很大误解,所以单独拿出来,从内存等各方面透彻的梳理一遍。 一维数组 char * a = (char*)malloc(8 * sizeof(char)); memset(a, 0, 8); for (int i = 0; i < 8; i++) { *(a + i) = 'a' + i; } for (int i = 0; i < 8; i++) { cout << *(a+i); } for (int i = 0; i < 8; i++) { cout << a[i]; } free(a); 输出内容abcdefghabcdefgh 这样申请与char a[8]是一样的,不管是底层实现还是使用,都是一样的,这就是一个8个字节长度的数组。我们看内存,也是一段连续的数据。 释放内存的时候,系统可以根据内存管理把这连续的8个字节的空间回收。 二维数组 我们先看一下正常的用法 char a[8][4] = { 0 }; for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { a[i][j] = 'a' + i; } }

排序算法 (Java)

余生长醉 提交于 2019-12-24 18:32:39
视频参考:B站:马士兵,青岛大学–王卓。 时间复杂度 Big O 算法花费时间随着问题规模的扩大的变化 不考虑必须要做的操作:循环、赋初值、程序初始化…; 不考虑常数项; 不考虑低次项; 一般时间复杂度都是“最差”的情况 E.g.: 访问数组某个位置的值: O(1) 访问链表某个位置的值: O(n) 求数组平均数:O(n) 选择排序 SelectionSort 最简单 最没用: O(n^2), 不稳定 找到最小的数的位置(索引) 把这个位置上的数和【0】上的数交换 把除第一个位置之后的剩余部分的数组重复过程,确定位置【1】的数 循环3的操作,直到最后一个数 时间复杂度:计算执行次数最多语句的时间随着规模扩大的规律,然后忽略常数项、低次项 笔记:外循环i控制每轮要排的最小值的索引;内循环遍历最小值索引后的每一位索引的值,与当前最小值索引上的值作比较,把最小的值换到最小值索引上。 /** * 选择排序 * @param arr */ public static void selectionSort(int[] arr) { //由于要保证i后面还有数才需要排序,所以i最大可以取到[arr.length-2]就行 for (int i = 0; i < arr.length-1 ; i++) { //执行n次 int minPos = i; //每次循环的要求的最小值的位置都加1 /

数组,指针与函数

与世无争的帅哥 提交于 2019-12-24 04:22:59
一.数组作为函数参数 1. 数组元素 可以用作函数实参,用法与变量相同,向形参传递数组元素的值。(单向传递) 2.数组名可以用作函数的实参和形参,传递的是数组第一个元素的地址。(可利用这一特点改变实参数组的值) 3.形参数组可不指定其大小,因为形参数组首元素和实参数组首元素具有同一地址,定义时在数组名后跟一个空的方括号。 4.多维数组名作函数参数时,对形参的定义可以省略第一维的大小。(int array [ ][8]) 二.通过指针引用数组 1.指针变量既可以指向变量,也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。 2.引用数组元素可用下表法和指针法。(使用指针法使目标程序质量高,占用内存少,运行速度快) 例:int a[10]; int p; p=&a[0]或p=a; 或者直接写成int p=a; 3.当指针指向一个数组元素时,p+1指向同一数组中下一个元素,p-1指向同一数组中的上一个元素,即 加或减一个数组元素所占用的字节数。 (int,long,float—d=4;char—d=1) 例:p的初值为&a[0],则 * ( p+1)= (a+i)=a[5]([ ]实际上是变址运算符,a[ i]即计算a+i) 4.如果指针变量p1和p2都指向同一数组中的元素,如执行p2-p1,结果是 两个地址之差除以数组元素长度*

几百万数据放入内存不会把系统撑爆吗?

妖精的绣舞 提交于 2019-12-23 18:34:25
在公司有一个需求是要核对一批数据,之前的做法是直接用SQL各种复杂操作给怼出来的,不仅时间慢,而且后期也不好维护,就算原作者来了过一个月估计也忘了SQL什么意思了,于是有一次我就想着问一下之前做这个需求的人为什么不将这些数据查出来后在内存里面做筛选呢?直接说了你不怕把内存给撑爆吗?此核算服务器是单独的服务器,配置是四核八G的,配置堆的大小是4G。本着怀疑的精神,就想要弄清楚几百万条数据真的放入内存的话会占用多少内存呢? 计算机的存储单位 计算机的存储单位常用的有bit、Byte、KB、MB、GB、TB后面还有但是我们基本上用不上就不说了,我们经常将bit称之为比特或者位、将Byte简称为B或者字节,将KB简称为K,将MB称之为M或者兆,将GB简称为G。那么他们的换算单位是怎样的呢? 换算关系 首先我们得知道在计算机中所有数据都是由0 1来组成的,那么存储0 1这些二进制数据是由什么存放呢?就是由bit存放的,一个bit存放一位二进制数字。所以bit是计算机最小的单位。 大部分计算机目前都是使用8位的块,就是我们上面称之为的字节Byte,来作为计算机容量的基本单位。所以我们一般称一个字符或者一个数字都是称之为占用了多少字节。 了解了上面关于位和字节的关系后,我们可以看一下其他的单位换算关系 11B(Byte 字节) = 8bit(位) 21KB = 1024B 31MB =

指针1

泪湿孤枕 提交于 2019-12-23 09:49:22
一.复习 指针 1.定义 基类型 指针变量名 2.赋值 int a; int pa=&a; 或 int a, pa=&a//定义的同时赋值 或 int p2; p2=&a;//先定义后赋值 3.两个运算符 & 取地址,后面的操作数必须是变量 *为指针运算符,后面的操作数必须是指针 int a=3; int *pa=&a; &a正确,表示a的地址 &pa正确,表示pa的地址 *a不对,a是int整型,不是指针型 *pa正确,表示的是pa指向的变量,即a *&a正确,表示的就是a *&pa,表示的是pa &*a不对,形式不对,*后必须为指针型,而a是常量 &*pa正确,表示的是pa,即&a(从右往左) 注:& 或 &如果正确使用,则两个运算符可以相互抵消 一.利用指针访问(引用)数组 1.通过下标遍历数组元素 int a【】={1,2,3,4,5}; a表示的是数组首元素的地址,是一个地址常量,不能改变,等价&a【0】 2.int pa=a;//指针变量pa指向数组首地址 相当于int pa=&a【0】;如果指针变量指向数组的首地址,此时指针变量可以使用下标,即指针变量等同于数组名,即a【1】=======pa【1】 3.当指针变量指向数组的时候,指针变量的加减运算才有意义 4.当指针变量pa指向数组a的首地址,且pa的值不能改变,且pa的值不能改变,一直指向数组的首地址,i表示下标