指针数组

C语言中字符数组库函数

拈花ヽ惹草 提交于 2020-03-29 04:04:25
以下内容摘自《C程序设计教程》(美)H.M.Deitel P.J.Deitel著,薛万鹏等译,机械工业出版社。 void *memccpy (void *dest, const void *src, int c, size_t n); 从sr*所指向的对象复制*个字符到*est所指向的对象中。如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置;否则返回NULL。 void *memcpy (void *dest, const void *src, size_t n); 从sr*所指向的对象复制*个字符到*est所指向的对象中。返回指针为dest的值。 void *memchr (const void *s, int c, size_t n); 在s所指向的对象的前n个字符中搜索字符c。如果搜索到,返回指针指向字符c第一次出现的位置;否则返回NULL。 int memcmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符。返回值是s1与s2第一个不同的字符差值。 int memicmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符,忽略大小写

小沈的C++学习7——指针

[亡魂溺海] 提交于 2020-03-25 15:00:59
  这节课终于学到指针了,话说感觉我是不是在前面几篇博客已经用过不少次这玩意了。但是指针到底是个什么东西呢?今天就让我们来学习指针这个东西。   首先我们小学一年级就学过,电脑里面有内存这个东西,就是利用电位高低存储各种数据,然后可以让cpu各种调用的小容器,而各种数据就听从程序的指挥,在一个个小格子里落户,这个格子就是内存地址。这个时候如果一个函数内部运行的时候在内存上留下了一串数据,它想把这一串数据都交给主函数,那它就可以直接把某个小格子的位置告诉主程序,主程序就可以利用这个位置信息直接到内存里去找这个函数留下来的数据。而这个位置信息就是指针。   首先我们要知道,指针本身也是一种数据,意思就是我们拿到一个指针,到指针指的位置上拿到一个数据,可能也是一个指针。   有了指针,我们甚至可以自己创造一个数据类型。比如我们所有函数都遵循这样一个约定:返回一个指针,指针指向一个指针数组,指针数组的一个指针指向一个数字,代表这个数据的长度或者内存长度,第二个指针指向另一个数字数组,代表这个数据里面每个数据的数据类型,第三个及之后的指针则指向各个数据。这个数据类型是不是很熟悉?没错,只要我们愿意,我们也可以手作一个列表。并且由于指针可以指向指针,这个列表可以不断嵌套(禁止禁止套娃)。 一、指针定义和运算 首先既然我们有了地址,那我们也要知道地址的数据有多长,是个什么类型的数据

数组和指针

房东的猫 提交于 2020-03-23 12:00:52
本节结束。================================================================== 数组类型:是一个复杂类型;(由数组元素类型和数组长度综合表述)如下;数组类型是:(int []); 类型的本质是:固定大小内存块的别名。是模具。 一. 对一维数组 C语言规定: int c[10]; 1.一维数组名:c是数组首元素的地址,c+1步长为 4个字节,一个 int 元素大小。 &c是整个数组的地址,&c+1步长为40个字节,十个 int 元素大小 虽然c和&c的值相同,但是他们所代表的步长不同。 2.数组第i 个元素这样表示:c[i] 或 *(c+i); 给它赋值。c[i] = 5 或 *(c+i) = 5; 本节结束。================================================================== 二. 多维数组(int a[3][4]) 1.多维数组名:a是指向一个一维数组 的数组指针,a 的步长为一维的长度(即每次+1都跳一行)(16个字节,四个int元素元素大小) 2.(a+i)代表是整个第i行的地址,(代表二级指针) *(a+i)代表第i行首元素地址 (代表一级指针) *(a+i)+j或(&a[i][j])代表第i行第j个元素的地址 *(*(a+i)+j)或(a[i]

黑马程序员——指针的应用

大兔子大兔子 提交于 2020-03-23 09:15:21
黑马程序员——指针的应用 ------- android培训 、 ios培训 、期待与您交流! ---------- 内存单元的标号也叫做地址,既然根据内存单元的编号或地址可以找到所需的内存单元,所以通常也把这个地址成为指针 允许用一个变量来存放指针,这种变量称为指针变量 指针是一个地址,是一个常量 指针变量存放一个地址,是一个变量 **1 、定义指针变量 ** 一般形式为:类型说明符 *变量名; *表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型 例如:int *pi; //一个指向整形变量的指针 long *pi; //一个指向长整形变量的指针 float *pi;//一个指向浮点型变量的指针 char *pi;//一个指向字符型变量的指针 **2 、指针变量的定义** 数据类型 *指针变量名 int *p; //定义了一个指针变量,变量名为p。。int表示,p只能存放一个int类型的变量的地址 char *p1; //定义了一个指针变量,变量名为p1。。p1只能存放一个char类型数据变量的地址 注意:1)*必须得有,如果没有就相当于定义一个普通变量。2)指针变量不能用来存放数值或者字符。3)指针变量有全局和局部之分 **3 、指针变量的初始化和引用** 1)指针变量的初始化 1、定义的同时初始化:int *p=&a; 2

DS博客作业02--栈和队列

旧巷老猫 提交于 2020-03-22 20:11:35
0.PTA得分截图 1.本周学习总结 1.1总结栈和队列内容 栈的顺序存储结构及其基本运算 栈是限制插入和删除只能在一个位置上进行的表,采用顺序存储结构的栈称为顺序栈。 顺序栈的结构体定义: typedef struct { ElemType data[MaxSize] ;//存放栈中的数据元素 int top;//栈顶指针,即存放栈顶元素在data数组中的下标 }SqStack;//顺序栈类型 初始化栈 该运算创建一个空栈,由s指向它。实际上就是分配-一个顺序栈空间,并将栈顶指针设置为-1。 void InitStack(SqStack * &s) { s= (SqStack * )malloc( sizeof(SqStack)); //分配一个顺序栈空间, 首地址存放在s中 s-> top=-1;//栈顶指针置为-1 } 判断栈是否为空 该运算实际上用于判断条件s-> top==-1是否成立。 bool StackEmpty(SqStack *s) { return(s-> top==-1); } 进栈Push(&s,e) 该运算的执行过程是,在栈不满的条件下先将栈顶指针增1,然后在该位置上插人元素e,并返回真;否则返回假。 bool Push(SqStack * &s, ElemType e) { if (s-> top==MaxSize- 1)//栈满的情况,即栈上溢出

数组、字符串和指针

感情迁移 提交于 2020-03-21 01:28:33
1.如何使用数组   数组就是一组名为数组元素或简称元素的内存位置,各个内存位置可以存储相同数据类型的数据项,而我们可以用相同的变量名引用所有内存位置。 2.如何声明和初始化不同类型的数组   声明数组:例如 long height[6];   初始化数组:例如 int engine_size[5] = {200, 250, 300, 350, 400};   C++11标准定义了一种表示一组初始值的新的统一方式,对于用这种方式初始化的所有对象,这些初始值都是相同的,包括标准模板库容器和数组。   例如:int value[]{2,3,4}; 有了这种语法,=操作符就是不必要的。 3.如何对数组使用基于范围的for循环   例如: double temperatures[] = {65.5, 68.0, 75.0, 77.5, 76.4, 73.8, 80.1};       double sum = 0.0;       int count = 0;       for(double t : temperatures){         sum += t;         ++count;       }       double average = sum/count;   还可以使用auto关键字来编写该循环:     for(auto temperature :

指针运算

与世无争的帅哥 提交于 2020-03-20 16:26:37
指针只能进行加减运算。 指针的加运算递增的值取决于指针指向对象的类型。 int a=20; int* p=&a; 这里指针指向的地址假如是0x22ff44, p++以后指针指向的地址就是p+1*sizeof(int)=0x22ff48 假如指针指向数组,那么p++就相当于指向数组的下一个元素,具体指针递增的字节数看数组的类型 double a[]={1,2,3}; double* p=a; cout<<*(p+1)<<endl; *(p+1)这里指针指向数组第二个元素,然后输出数组地址的值 (p+1)=2这样就是错误的 来源: https://www.cnblogs.com/kennyMc/archive/2012/09/17/2689870.html

指针函数/函数指针/指针数组/数组指针 区别

∥☆過路亽.° 提交于 2020-03-20 04:32:30
今天又遇到了指针数组,理解通道数据搞了半天。。。 bool LocalFileSaver::SaveADCData(Cash *data, LPCTSTR folder) { if (_tcscmp(folder, _T("")) == 0) { return false; } TCHAR path[MAX_PATH] = { 0 }; TCHAR fileName[128] = { 0 }; char sn[24] = { 0 }; strcpy(sn, data->GetSN()); if (sn[0] == '\0') { sprintf(sn, "0"); } wsprintf(fileName, _T("%04d%02d%02d_%02d%02d%02d_%03d_Err%03d_LastErr0x0_Den%d_Dir%d_Ver%02d_SN%s_adc.raw"), runCashStartTime.wYear, runCashStartTime.wMonth, runCashStartTime.wDay, runCashStartTime.wHour, runCashStartTime.wMinute, runCashStartTime.wSecond, data->Id(), data->GetError(), data->GetDenomination(),

C语言总结2

廉价感情. 提交于 2020-03-19 08:42:36
12).预处理指令 1. 什么叫做预处理代码. 以#开头的代码就是预处理代码 #warning #import 2. 手写1个C程序的步骤.(面试题) 1>编写代码 2>编译 1)执行.c中的预处理代码 2)检查语法 3>链接 4>执行 3. 预处理指令的分类.(面试题) ****** 1>文件包含指令 #include 2>宏定义 #define (用来替换代码) 3>条件编译 #if (满足一定的条件才编译) 4. 预处理指令的特点. 1>都是以#开头 2>后面没有分号 3>在编译的时候,检查语法之前进行 "注意 以#开头的代码就是预处理代码 13).sizeof运算符 sizeof运算符的作用? 作用:计算常量,变量在当前系统上内存中所占的字节数 sizeof (数据类型) sizeof (变量)-----用的最多! sizeof (常量) 注意, char类型的变量在内存中占1个字节; char类型的常量在内存中占4个字节; 综上所述,为了安全起见,sizeof后面最好加上括号! 14).按位异或 ^ 异或运算 不同为1,相同为0 注意: 1 相同整数相^的结果是0; 2 一个整数^另一个整数2次结果不变 ; 3^2^2 = 3 3 整数相^跟顺序无关 3^2^3 = 2^3^3 = 2 15). 按位左移或者右移 1,按位左移运算. << 参与按位左移运算的二进制数据.

指针系统学习2

故事扮演 提交于 2020-03-19 08:42:14
1.数组与指针   一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。   指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。   所谓数组元素的指针就是数组元素的地址。 2.指向数组元素的指针   定义一个指向数组元素的指针变量的方法,与以前介绍的指向变量的指针变量相同。   例如:   int a[10];(定义a为包含10个整型数据的数组)   int *p; (定义p为指向整型变量的指针变量)。   应当注意,如果数组为int型,则指针变量的基类型亦应为int型。 3.下面是对该指针变量赋值:   p = &a[0];把a[0]元素的地址赋给指针变量p。 也就是使p指向a数组的第0号元素,见图 -->> 4.通过指针引用数组元素:   引用一个数组元素,可以用:   (1) 下标法,如 a[i] 形式;   (2) 指针法,如*(a+i)或*(p+i)。   其中的a是数组名,p是指向数组元素的指针变量,其初值 p=a。   注意:数组名即“翻译成数组的第一个元素的地址! 例题: 输出数组中的全部元素 假设有一个a数组,整型,有10个元素。要输出各元素的值有三种方法: (1) 下标法 #include <stdio.h> void main() { int a[10]; int i; for(