指针数组

C--二维数组、指针数组、数组指针(字符串简单举例)

五迷三道 提交于 2019-12-04 07:11:43
程序代码 #include "stdio.h" #include "stdlib.h" #include "string.h" /* 二维数组表示方法如下 1.数组名 2.指针数组 3.数组指针(只能用来存储二维数组的数组名[即二维数组的首地址],不可用来存储内容) */ // 二维数组 // ① char testStr1[10][6] = {"begin", "ifgbd", "while", "dosfa", "abend"}; // 字符串的存储方式 1.字符数组 2.字符指针变量 char testStr1[10][5] = {{'b','e','g','i','n'}, {'i','f','g','b','d'}, {'w','h','i','l','e'}, {'d','o','s','f','a'}, {'a','b','e','n','d'}}; /* 注意: char str1[10] = {'s','t','u','d','e','n','t'}; 在内存中的存放形式为: s t u d e n t 【6】 char str2[10] = "student"; // 在存储字符串时末尾自动加上字符串的结束标志'\0' 在内存中的存放形式为: s t u d e n t \0 【7】这是为什么前面 testStr1[10][6] 要这样定义

php常用函数

守給你的承諾、 提交于 2019-12-04 05:56:24
字符串函数 strlen:获取字符串长度,字节长度 substr_count 某字符串出现的次数 substr:字符串截取,获取字符串(按照字节进行截取) mb_strlenmb_substr strchr:与substr相似,从指定位置截取一直到最后 strrchr(获取文件后缀名):与strchr一样,只是从右边开始查找字符 strtolower:所有的字符都小写(针对英文字母) strtoupper:所有的字符都大写 strrev:字符串反转(只能反转英文:英文存储只有一个字节),按照字节进行反转 strpos:从字符串中找对应字符出现的位置(数字下标),从最左边开始找 strrpos:与strpos一样,只是从字符串的右边开始找 trim:去掉函数两边的字符,默认是空格 str_split 函数把字符串分割到数组中。 chunk_split() 函数把字符串分割为一连串更小的部分 str_repeat("Shanghai",5);把字符串 "Shanghai " 重复 5 次 str_replace('\\', '/', dirname(__DIR__))); 替换 ucfirst 首字母大写 2时间日期函数 time:得到当前时间的时间戳(整型:从格林威治时间1970年1月1日0时0分0秒开始)秒数 date:时间序列化函数,将指定的时间戳转换成规定时间日期的显示格式

【C语言】-struct

落花浮王杯 提交于 2019-12-04 04:01:21
在c语言中结构体(struct)跟面向对象编程(如java等)里面的类是非常相似的。不过像C++里面对结构体进行了扩展,c++里面的结构体是可以包含方法的,但是C语言里面是不能包含方法(函数)的。 一般格式 struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 类型为五种数据类型(整型、浮点型、字符型、指针型和 无值型)。 定义结构变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作结构说明, 再用结构名来定义变量。 例如: struct string

c++ 面试(100题刷题)

陌路散爱 提交于 2019-12-04 01:53:39
目录 1.C++与C的差异 1.1 C与c++中的struct的差异 1.4 c与c++ 不同之处 1.5 指针与引用的区别 1.6 sizeof 1.7 static 的作用域 1.8 c++ 中值传递的三种方式 1.9 inline 函数 1.10 virtual与inline 1.11 Debug和Release的区别 1.12 assert 1.13 const 与#define 1.14 malloc/free 与 new delete 1.15 动态申请内存耗尽 1.20 const 1.21 判断系统是多少位系统 1.22 1.23 1.24 实参与形参 1.25 计算精度误差 1.26 堆和栈 1.27 explicit与protected 1.28 浅拷贝与内存泄漏 ,深拷贝 1.30 数组名作为参数与int 作为参数的区别 1.31 程序的可读性与可维护性-变量 1.32 const 的用法 1.33 virtual 是如何实现多态的? 1.34 面向对象三大特性 1.35 重载 ,重写 ,重定义 1.36 一个空类的对象占的字节数 1.37 内联函数是否参数检查 1.38 析构函数与虚函数 1.40 c++模板编程的理解 1.41 函数模板与类模板 1.41 运算符重载 1.42 基类的析构函数为什么必须是虚函数? 1.43 c++的左值与右值 1.44

可持久化平衡树详解及实现方法分析

馋奶兔 提交于 2019-12-04 00:25:01
目录 前置要求 核心思想 实现方法比较:指针 与 数组模拟指针 Merge 是否应该新建节点 参考程序 前置要求 带旋转的平衡树会改变祖先关系,这令可持久化变得困难。所以需要使用非旋的平衡树,如 非旋treap 。本文以非旋treap为例。 核心思想 可持久化的数据结构,其核心都是不改变历史的信息。当需要对信息进行修改的时候就新开一个节点,继承历史信息,然后再进行修改。 对于非旋treap来说,主要是对 Split 和 Merge 两个操作进行可持久化。剩下的操作不会对数据产生影响。而考虑到非旋treap上的操作在 Split 后一定跟随着对应的 Merge ,所以不需要对每个 Split 和 Merge 操作都进行可持久化。只要实现 Insert 和 Delete 的可持久化即可。 Split Split 操作的可持久化比较容易实现,直接复制节点即可: std::pair<int, int> Split(int Root, int Key) { if (!Root) return std::pair<int, int>(0, 0); std::pair<int, int> Temp; int New = ++Used; Pool[New] = Pool[Root]; if (Key < Pool[New].Value) { Temp = Split(Pool[New]

指针专题2-数组指针

白昼怎懂夜的黑 提交于 2019-12-03 20:34:56
1 以指针的方式遍历数组元素 int arr[]={11, 22, 33, 44, 55 }; int len = sizeof(arr)/sizeof(int); //求数组长度 char i; for(i=0; i<len; i++) { printf("%d ", *(arr+i)); //*(arr+i)等价于arr[i] }   arr是int*类型,每次加1时,arr自身的值(地址)会增加sizeof(int)。 2 以数组指针的方式遍历数组元素 int arr[]={11. 22, 33, 44, 55 }; int len = sizeof(arr)/sizeof(int), *p=&arr; //等价于*p=&arr[0] char i; for(i=0; i<len; i++) { printf("%d ", *(p+i)); //*(p+i)等价于*(arr+i) }   p、arr、&arr[0] 等价   *(p+i)、*(arr+i)、arr[i]、p[i ]等价 3 借助自增运算符遍历数组元素   不管是数组名还是数组指针,都可以用上面的两种方式来访问数组元素,不同的是:数组名是常量,他的值不能被改变;数组指针是变量(除非特别指明它是常量),它的值可以任意改变。也就是说,数组名只能指向数组的开头,而数组指针可以先指向数组开头,再指向其他元素。 int

指针数组和数组指针

只谈情不闲聊 提交于 2019-12-03 17:09:22
指针数组: 定义变量: 类型 *变量名[len] 含义: 存放len个地址的一维数组 1、一维数据的“另一种写法“: 1 ... 2 3 int i1=1,i2=2; 4 int *p[2]; 5 p[0]=&i1,p[1]=&i2; 6 cout<<p[0]<<" "<<p[1]<<endl; 7 cout<<p[0][0]<<" "<<p[1][0]<<endl; 8 9 ... View Code 2、二维数组情况: 1 ... 2 3 int b[3][3]={{2,3,4},{8,8,8},{4,5,6}}; 4 int *pb[3]; 5 for(int i=0; i<3; i++) 6 pb[i] = b[i];//p[i]存放第i行的地址 7 for(int i=0; i<3; i++) 8 { 9 for(int j=0; j<3; j++) 10 cout<<pb[i][j]<<'\t'; 11 cout<<endl; 12 } 13 14 ... View Code 注意:数组是引用类型,赋值时直指堆内存的存储空间 数组指针: 定义: 类型 (*变量名)[len] 含义: 二维数组的引用类型,笔者这样理解 1、一维情况: 1 ... 2 3 int a[3]={2,3,3}; 4 int (*p)[3];//p++,步长3*sizeof(int)

20182323 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

荒凉一梦 提交于 2019-12-03 12:10:05
目录 学号20182323 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 结对及互评 点评模板: 点评过的同学博客和代码 学习进度条 参考资料 目录 学号20182323 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 第13章 查找与排序 查找 线性查找:属于无序查找算法。从序列一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。 ps:设置哨兵可提高查找效率(设第一个为哨兵,用n记录当前位置,遍历整个序列后弹出的条件为“n==0”) 二分法查找 说明:元素必须是有序的,如果是无序的则要先进行排序操作。 基本思想:用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。 查找总结: 排序 插入排序: 将待插元素,依次与已排序好的子数列元素从后到前进行比较,如果当前元素值比待插元素值大,则将移位到与其相邻的后一个位置,否则直接将待插元素插入当前元素相邻的后一位置,因为说明已经找到插入点的最终位置

go map数据结构和源码详解

白昼怎懂夜的黑 提交于 2019-12-03 10:26:23
目录 1. 前言 2. go map的数据结构 2.1 核心结体体 2.2 数据结构图 3. go map的常用操作 3.1 创建 3.2 插入或更新 3.3 删除 3.4 查找 3.5 range迭代 3.5.1 初始化迭代器mapiterinit() 3.5.2 迭代过程mapiternext() 4. go map的扩容缩容 4.1 扩容缩容的基本原理 4.2 为什么叫“伪缩容”?如何实现“真缩容”? 5 Q&A关键知识点 5.1 基本原理 5.2 时间复杂度和空间复杂度分析 1. 前言 本文以go1.12.5版本分析,map相关的源码在runtime包的map开头的几个文件中,主要为map.go。 go的map底层实现方式是hash表(C++的map是红黑树实现,而C++ 11新增的unordered_map则与go的map类似,都是hash实现)。go map的数据被置入一个由桶组成的有序数组中,每个桶最多可以存放8个key/value对。key的hash值(32位)的低阶位用于在该数组中定位到桶,而高8位则用于在桶中区分key/value对。 go map的hash表中的基本单位是桶,每个桶最多存8个键值对,超了,则会链接到额外的溢出桶。所以go map是基本数据结构是hash数组+桶内的key-value数组+溢出的桶链表 当hash表超过阈值需要扩容增长时

程序员需要了解的硬核知识之内存

杀马特。学长 韩版系。学妹 提交于 2019-12-03 10:12:35
程序员需要了解的硬核知识之内存 https://www.cnblogs.com/cxuanBlog/p/11751609.html 我们都知道,计算机是处理数据的设备,而数据的主要存储位置就是 磁盘 和 内存 ,并且对于程序员来讲,CPU 和内存是我们必须了解的两个物理结构,它是你通向高阶程序员很重要的桥梁,那么本篇文章我们就来介绍一下基本的内存知识。 什么是内存 内存(Memory)是计算机中最重要的部件之一,它是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,内存又被称为 主存 ,其作用是存放 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。只要计算机在运行中,CPU 就会把需要运算的数据调到主存中进行运算,当运算完成后CPU再将结果传送出来,主存的运行也决定了计算机的稳定运行。 内存的物理结构 在了解一个事物之前,你首先得先需要 见 过它,你才会有印象,才会有想要了解的兴趣,所以我们首先需要先看一下什么是内存以及它的物理结构是怎样的。 内存的内部是由各种IC电路组成的,它的种类很庞大,但是其主要分为三种存储器 随机存储器(RAM): 内存中最重要的一种,表示既可以从中读取数据,也可以写入数据。当机器关闭时,内存中的信息会 丢失 。 只读存储器(ROM):ROM 一般只能用于数据的读取,不能写入数据,但是当机器停电时