指针数组

C语言结构体用法

半城伤御伤魂 提交于 2019-12-04 22:01:48
结构体(struct) 结构体是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构体中可以使用不同的数据类型。 1. 结构体说明和结构体变量定义 在Turbo 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

8大数据结构

…衆ロ難τιáo~ 提交于 2019-12-04 20:58:37
数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1 、数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从 0 开始。例如下面这段代码就是将数组的第一个元素赋值为 1 。 int[] data = new int[100]; data[0] = 1; 优点: 1 、按照索引查询元素速度快 2 、按照索引遍历数组方便 缺点: 1 、数组的大小固定后就无法扩容了 2 、数组只能存储一种类型的数据 3 、添加,删除的操作慢,因为要移动其他的元素。 适用场景: 频繁查询,对存储空间要求不大,很少增加和删除的情况。 2 、栈 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。 栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。 3 、队列 队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出

offsetof(s,m)解析

南笙酒味 提交于 2019-12-04 18:49:08
h ttps://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(

sizeof

断了今生、忘了曾经 提交于 2019-12-04 18:45:21
本文转载百度百科。 编辑本段 用法   var a : array[1..10000] of longint;    Begin   Writeln(SizeOf(a));   End.   输出:40000   如果定义Integer,则输出:20000    c语言 中判断数据类型长度符   用法   sizeof(类型说明符, 数组 名或表达式);   或   sizeof 变量名   1. 定义:   sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。   MSDN上的解释为:   The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.   其返回值类型为size_t,在头文件 stddef.h 中定义。这是一个依赖于编译系统的值,一般定义为   typedef unsigned int size_t;   世上 编译器 林林总总,但作为一个规范,它们都会保证char、signed char和unsigned  

sizeof、strlen之一

半腔热情 提交于 2019-12-04 18:44:43
解析C/C++语言中的sizeof 一、sizeof的概念   sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法   1、用于数据类型   sizeof使用形式:sizeof(type)   数据类型必须用括号括住。如sizeof(int)。   2、用于变量   sizeof使用形式:sizeof(var_name)或sizeof var_name   变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。   注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。   如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果    sizeof 操作符的结果类型是size_t

【algo&ds】2.线性表

被刻印的时光 ゝ 提交于 2019-12-04 18:31:25
1.线性表 线性表 (英语:Linear List)是由n(n≥0)个 数据 元素( 结点 )a[0],a[1],a[2]…,a[n-1]组成的 有限序列 。 其中: 数据元素的个数n定义为表的长度 = "list".length() ("list".length() = 0(表里没有一个元素)时称为空表) 将非空的线性表(n>=1)记作:(a[0],a[1],a[2],…,a[n-1]) 数据元素a[i](0≤i≤n-1)只是个抽象符号,其具体含义在不同情况下可以不同 一个数据元素可以由若干个数据项组成。数据元素称为记录,含有大量记录的线性表又称为文件。这种结构具有下列特点:存在一个唯一的没有前驱的(头)数据元素;存在一个唯一的没有后继的(尾)数据元素;此外,每一个数据元素均有一个直接前驱和一个直接后继数据元素。 2.线性表的存储结构 顺序表 链表 单链表 动态单链表 静态单链表 双链表 循环链表 单循环链表 双循环链表 静态链表 3.顺序表 利用数组的连续存储空间顺序存放线性表的各元素 3.1结构体定义 如果需要使用自定义的结构体来维护一个顺序表,通常来讲结构体的元素一般是一个固定大小的数组(可用长度足够大),以及当前数组存放的元素个数,也即数组的长度 typedef struct LNode *List; struct LNode { ElementType Data

JAVA数据结构

强颜欢笑 提交于 2019-12-04 13:27:46
JAVA中的常用的数据结构、每个特定类的使用和功能适用的场合。 一、数据结构 1.逻辑结构和物理结构 逻辑结构 :反映数据元素之间的逻辑关系,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。常见的逻辑结构有集合、线性结构、树形结构、图形结构。    集合 :数据结构中的元素之间除了同属一个集合”的相互关系外,别无其他关系。    线性结构 :数据结构中的元素存在一对一的相互关系。每个数据元素只有一个直接前驱和一个直接后继,线性结构有线性表,栈,队列,双队列,串,一般多维数组、广义表不是线性结构。    树形结构 :数据结构中的元素存在一对多的相互关系。且具有明显的层次关系,每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。树形结构可以表示从属关系、并列关系。数据结构中各种树形状都是树形结构。    图形结构 :数据结构中的元素存在多对多的相互关系。结点之间的关系可以是任意的,任意两个数据元素之间都可能相关,图形结构常被用于描述各种复杂的数据对象。 物理结构 :指数据的逻辑结构在计算机存储空间的存放形式。包括数据元素的机内表示和关系的机内表示,数据元素的机内表示指用二进制位的位串表示数据元素,称这种位串为节点。当数据元素有若干个数据项组成时,位串中与多个数据项对应的子位串称为数据域。关系的机内表示则可以分为顺序映像和非顺序映像

C语言的数组和指针的区别

五迷三道 提交于 2019-12-04 10:35:17
1.看到这个题目大家应该知道了,数组和指针它俩不是一回事儿,它俩是有区别的!    我原来看数组的时候,一直都是用数组名表示数组内容的首地址,但是当我认真在网上看了数组和指针之后,发现数组和指针不等价! 举个例子,相信大家见过这种写法: int arr[] = { 1,2,3,4,5}; int *b = arr;   我们一般的认识是 arr是一个指针,指向数组的首地址,然后它把这个地址的值赋给了指针变量b。   但是这种理解是有一点的不准确,严格来说应该是 arr被转换为了一个指针。 再举个例子: #include <stdio.h> #include <string.h> int main(){ int a[6] = {1,2,3,4,5,6}; int *b = a; int len_a = sizeof(a) / sizeof(int); int len_b = sizeof(b) / sizeof(int); printf("len_a = %d\n",len_a); printf("len_b = %d",len_b); return 0; }   如果,咱们说如果哦,如果数组和指针等价,那么这两个结果应该是一样的,但是我们来看一下运行结果:   这特么是什么玩意,这个 2 是哪来的。    我们来看一下C语言中文网上的描述:   数组是一系列数据的集合

go中的数据结构切片-slice

两盒软妹~` 提交于 2019-12-04 08:56:51
1.部分基本类型   go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0; 1 bytes = [5]btye{'h', 'e', 'l', 'l', 'o'}   变量bytes的类型是[5]byte,一个由5个字节组成的数组。它的内存表示就是连起来的5个字节,就像C的数组。 1.1字符串   字符串在Go语言内存模型中用一个2字长(64位,32位内存布局方式下)的数据结构表示。它包含一个指向字符串数据存储地方的指针,和一个字符串长度数据如下图:   s是一个string类型的字符串,因为string类型不可变,对于多字符串共享同一个存储数据是安全的。切分操作 str[i:j] 会得到一个新的2字长结构t,一个可能不同的但仍指向同一个字节序列(即上文说的存储数据)的指针和长度数据。所以字符串切分不涉及内存分配或复制操作,其效率等同于传递下标。 1.2数组   数组类型定义了长度和元素类型。如, [4]int 类型表示一个四个整数的数组,其长度是固定的,长度是数组类型的一部分( [4]int 和 [5]int 是完全不同的类型)。 数组可以以常规的索引方式访问,表达式 s[n] 访问数组的第 n 个元素。数组不需要显式的初始化;数组的零值是可以直接使用的,数组元素会自动初始化为其对应类型的零值。 1 var a [4]int 2 a[0] =

第一章 数组与指针概念剖析

情到浓时终转凉″ 提交于 2019-12-04 07:41:25
数组与指针生来就是双胞胎,多数人就是从数组的学习开始指针的旅程的。在学习的过程中,很自然就会经常听到或见到关于数组与指针的各种各样的看法,下面我节选一些在各种论坛和文章里经常见到的文字: “一维数组是一级指针” “二维数组是二级指针” “数组名是一个常量指针” “数组名是一个指针常量” ........................ 这些文字看起来非常熟悉吧?类似的文字还有许多。不过非常遗憾,这些文字都是错误的,实际上数组名永远都不是指针!这个结论也许会让你震惊,但它的确是事实。但是,在论述这个问题之前,首先需要解决两个问题:什么是指针?什么是数组?这是本章的主要内容,数组名是否指针这个问题留在第二章进行讨论。看到这里,也许有人心里就会嘀咕了,这么简单的问题还需要说吗?int *p, a[10];不就是指针和数组吗?但是,笔者在过往的讨论过程中,还真的发现有不少人对这两个概念远非清晰,这会妨碍对后面内容的理解,所以还是有必要先讨论一下。 什么是指针?一种普遍存在的理解是,把指针变量理解成就是指针,这种理解是片面的,指针变量只是指针的其中一种形态,但指针并不仅仅只有指针变量。一个指针,包含了两方面的涵义:实体(entity)和类型。标准是这样描述指针类型的: 6.2.5 Types A pointer type may be derived from a function type