指针数组

【Leetcode 做题学算法周刊】第四期

流过昼夜 提交于 2020-03-18 13:32:44
首发于微信公众号《前端成长记》,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67.二进制求和 69.x的平方根 70.爬楼梯 83.删除排序链表中的重复元素 88.合并两个有序数组 Easy 67.二进制求和 题目地址 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0 。 示例: 输入: a = "11", b = "1" 输出: "100" 输入: a = "1010", b = "1011" 输出: "10101" 题目分析设想 这道题又是一道加法题,所以记住下,直接转数字进行加法可能会溢出,所以不可取。所以我们需要遍历每一位来做解答。我这有两个大方向:补0后遍历,和不补0遍历。但是基本的依据都是本位相加,逢2进1即可,类似手写10进制加法。 补0后遍历,可以采用先算出的位数推入数组最后反转,也可以采用先算出的位数填到对应位置后直接输出 不补0遍历,根据短数组的长度进行遍历,长数组剩下的数字与短数组生成的进位进行计算 查阅他人解法 Ⅰ.补0后遍历,先算先推 代码: /** * @param {string} a * @param {string} b * @return {string} */ var

指针和动态数组 new ,delete

纵然是瞬间 提交于 2020-03-17 06:58:15
............心中要有一内存块,以便理解知识 计算机储存数据必须知道数据的3种属性: 1.存储在何处.......并起名 2.值 3.类型 (1)int a;a=30; (2)int *b=&a; (3).int *a,b;注意...整型....指针a,整型...变量b,对每个指针都要有一个*; .......................指针.......................................... 1.指针是一个变量,存储的是...值的地址,而不是值本身, 指针变量 是指向特定变量类型指针,和数组相似 ..int* tax;...............指向int变量的指针,又叫整型指针 ..double * str;.............指向double变量的指针 ..int 指针和double指针虽然指向的数据类型不同, 但这两个变量本身长度的通常是一样的,好比1016可能是超市的地址,也可能是,村庄的地址一样,.....地址的长度或值,不能指示该地址上有什么建筑物,也不指示有关变量的长度或类型的任何信息 .显示地址,cout常用16进制 .......................指针与c++原理.......................................... oop强调的是运行阶段进行决策; 如

IOS笔记-C语言中的字符串数组 指针

南楼画角 提交于 2020-03-16 21:46:09
1、字符串 用“”引起来的内容,就是字符串。 在C语言中有没有专门的字符串的变量? 没有 所以我们使用字符数组来存储字符串。(把字符串的每一个字符存储到字符数组的每一个元素中,并且会多存放一个‘\0’) '\0' 字符串的结束标记,ascII码表中值是 0 对应的字符。NUT,NULL 2、字符数组 1)定义 char 数祖名[长度]; char str[200]; 表示定义一个长度为200的字符数组,如果用来存储字符串,则字符串的最大长度是199,留出一个给'\0' char str[3]={'a','b','c'}; //不能以%s进行输出 2)初始化 (1)完全初始化 char str[3]={'a','b','c'}; (2)部分初始化 char str[3]={'a','b'}; (3)用字符串进行初始化 char str[10]="itcast"; //占用了7个字节因为'\0'占用了一个 char str[10]={"itcast"}; 3)字符数组的引用 如果把字符数组的内容逐个取出,str[0]、str[1]....str[n-1]; %s 字符串的格式控制符把字符数组整体进行输出 %s 给一个字符数组的首地址,系统会自动从首地址开始连续读取直到遇到'\0'结束 4)存储细节 字符数组存储的细节: 连续的一片存储区域(地址是连续的),每个字符占用1个字节

Golang 入门 : 数组

柔情痞子 提交于 2020-03-16 03:06:46
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。 本文将介绍 Golang 数组的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 Golang 数组的特点 我们可以把 Golang 数组的特征归纳为以下三点: 固定长度 :这意味着数组不可增长、不可缩减。想要扩展数组,只能创建新数组,将原数组的元素复制到新数组。 内存连续 :这意味可以在缓存中保留的时间更长,搜索速度更快,是一种非常高效的数据结构,同时还意味着可以通过数值的方式(arr[index])索引数组中的元素。 固定类型 :固定类型意味着限制了每个数组元素可以存放什么样的数据,以及每个元素可以存放多少字节的数据。 数组是个固定长度的数据类型,其长度和存储元素的数据类型都在声明数组时确定,并且不能更改。如果需要存储更多的元素,必须先创建一个更长的数组

C语言字符串中的指针与数组

≡放荡痞女 提交于 2020-03-15 21:52:56
先说一下字符串字面量(字符串常量):双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串储存在内存中。字符串常量属于静态存储类别,说明如果在函数中使用字符串常量,该字符串只会储存一次,在整个程序的生命周期内存在,即使函数被调用多次。用双引号扣起来的内容被视为指向该字符串储存位置的指针。 字符串的赋值可以用指针与数组,请看下面的例子 char str1[] = "I am a student"; const char *str2 = "I am a student too"; 以上两种表示方法还是有一些不同的 先说数组表示法,数组形式str1[]在计算机的内存中分配一个内含15个元素的数组(末尾还要加上空字符'\0'),当程序载入内存时,也载入了程序中的字符串,字符串存储在静态存储区中,但是当程序在开始时才会为该数组分配内存,此时才将字符串拷贝到数组中,注意此时字符串有两个副本,一个是静态存储区中的常量,另一个是存储在数组中的字符串。str1为首元素的地址(&str1[0]),是常量地址,不能更改,可以进行str1+1(&str1[1]),但是不允许str++这样的操作,因为递增运算符只能对变量名进行运算。 指针形式(*str2)也使得编译器为字符串在静态存储区预留19个元素空间,一旦开始执行程序,它会为指针变量str2流出一个储存位置,并把字符串的地址储存在指针变量中

嵌入式开发之C基础学习笔记06--数组和指针(非常重要,难点)

非 Y 不嫁゛ 提交于 2020-03-15 21:50:14
C语言进阶学习 数组 1)数组的使用 2)字符串(String):数组(尤其是一维数组)最常用的地方——————>C语言中字符串就是一维数组 数组: 定义:具有相同类型的数据的有序集合,并用唯一的名字来标识。 1)数组必须直接声明,编译器在编译阶段为其分配内存空间 2)C89数组必须是定长的,数组的大小在编译时是固定的;C99允许使用变长数组,数组的大小在运行时确定 void f(int longeur,int wide) { int matrix[longeur][wide];/*定义一个矩阵*/ /*数组的长度由两个参数决定*/ } 3)数组的所有元素占连续的内存空间,在内存中是线性(顺序)存放的,保存数组所需要的内存空间直接与基本类型和数组长度有关。 数组占用的内存空间 = sizeof(基类型)*数组长度 4)C不检查数组是否越界,程序可以在两边越界。程序员应自己加入越界检查。数组可以越界使用,但是初始化时不允许! 5)向函数传递数组: 定义数组形参的方法有三种:指针,定长数组,无尺寸数组 void func1(int *a){...} void func2(int a[10]){...} void func3(int a[]){...} 在函数的形参的声明中,数组尺寸无所谓,因为C语言没有边界检查 实际上,第二种方法在编译后,编译器产生的代码就是让函数接受指针

指针和数组

我的未来我决定 提交于 2020-03-09 13:39:43
待到秋来九月八,我花开后百花杀 指针和数组的区别 数组名在不同情况下都是什么? 指针数组 指针和数组的区别 首先我们看一段代码,在编程中是否遇到过这样的情况? # include <stdio.h> int main ( ) { int a [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ; printf ( "%d\n" , a [ 1 ] ) ; printf ( "%d\n" , * ( a + 1 ) ) ; int * p = a ; printf ( "%d\n" , p [ 1 ] ) ; printf ( "%d\n" , * ( p + 1 ) ) ; return 0 ; } 我们可以看到使用数组名和使用指针的效果一样。 那是否就能说明数组和指针有某种关系,甚至是一样的呢? 实际上指针和数组毫无关系。 首先,数组是数组变量类型,指针式指针变量类型,从变量类型角度来说就不同。 数组名是没有单独开辟空间的,而指针开辟了自己的空间,这就是他们最大的不同。 数组传参时,会发生降维(降维成指向其内部元素类型的指针),既然能够降维成指针,则说明两者不同。 他们在使用上不过是有一定相似性罢了。 有了上面的经验,我们也就可以知道了: int arr [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 ,

你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题

独自空忆成欢 提交于 2020-03-09 07:23:36
一、使用sizeof计算数组长度 1.1 sizeof的基本使用   如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: int nums[] = {11,22,33,44,55,66}; int i; // sizeof(nums) 计算nums数组的总字节数 // sizeof(int) 计算int类型所占用的字节数 int length = sizeof(nums)/sizeof(int); for(i=0;i<length;i++) { printf("%d ",nums[i]); }   其中sizeof(nums)代表计算nums数组的总字节数,而sizeof(int)则代表计算int类型所占用的字节数(32位系统下是4个字节,64位下可能不同,因此这里使用sizeof(int)可以向程序员屏蔽这个差异),运行结果为: 1.2 sizeof只能在编译时计算   假如我们将上面的代码做一个抽象,将数组的遍历及打印封装为一个方法,代码如下: void printEach(int* nums) { // sizeof(nums)在这里是计算指针的字节数 int length = sizeof(nums)/sizeof(int); printf("The length of nums is %d\n",length);

C语言--指针与多维数组的关系

╄→尐↘猪︶ㄣ 提交于 2020-03-08 20:58:34
人之所以痛苦,那是因为你在成长 。--------magic_guo 多维数组,在某种意义上讲,是数组的数组的数组…。 比如二维数组,相当于数组的数组,即在一维数组的基础上,建立的另一个一维数组。 一维数组和指针的关系是:数组名代表数组中首元素的地址,而在多维数组中也是这样。 只不过多维数组的数组名和一维数组的名,值是一样的,但意义不同。 下面的一切都以二维数组为例: 例如: a = {{1, 2, 3, 4}, {5, 6, 7, 8, 9}, {10, 11, 12, 13}} 二维数组的数组名 a 相当于排长,而二维数组中一维数组的数组名{ a[0], a[1], a[2] }相当于班长。 所以当a指向的是二维数组的首元素地址,a[0]也指向二维数组的首元素地址。但是它们两个的站位不同,也就是含义不同。 所以也就不难来理解为什么a[0]+1 和 *(a+0)+1都是&a[0][1]了。 理解了这个关键点,下面来理解另一个定义: 代码: # include <stdio.h> // 一个班三个学生,各学四门学科, 计算总平均分数以及第n个学生的成绩 int main ( void ) { void average ( float * p , int n ) ; void search ( float ( * p ) [ 4 ] , int n ) ; float a [ 3 ]

数组与指针

倾然丶 夕夏残阳落幕 提交于 2020-03-08 20:07:06
1、数组元素的指针    一 个变量有地址,一个数组包含若干元素,每个数组元紫都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某元素的地址放到一个指针变量中)。所谓数组元索的指针就是数组元素的地址。引用数组元素可以用下标法(如a[3]),也可以用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。 /*定义一个指向数组元素的指针变量的方法*/ int a[10]; //定义a为包含10个整型数据的数组 int *p; //定义p为指向整型变量的指针变量 /*应当注意:如果数组为int型,则指针变量的基类型也为int型,下面对该指针变量赋值*/ p=&a[0]; //把a[0]元素的地址赋给指针变量p /*C语言规定,数组名代表数组中首元素的地址*/ p=&a[0] <=> p=a //等价关系 /*注意数组名a不代表整个数组,上述p=a的作用是把a数组元素的首地址赋给指针变量p,而不是将数组a各元素的值赋给p*/ 2、通过指针引用数组元素    假设p已定义为一个指向整型数据的指针变量,并已给它赋了一个整型数组元素的地址,使它指向某一个数组元素。如果有赋值语句:*p=1; 表示将1赋给ρ当前所指向的数组元素。按C语言的规定:如果指针变量p已指向数组中的一个元素,则p