数组概述
来源:互联网 发布:无锡网络推广技巧 编辑:程序博客网 时间:2024/04/28 01:25
摘要
主要对数组相关的基础知识进行概述,主要内容有数组的定义及相关概念,数组的越界现象,数组空间的初始化,字符串处理的函数,非字符的内存处理,指针数组
数组的定义及相关概念
数组其实是内存分配的一种形式,其用法和指针十分类似。数组也是定义了一个内存空间。在初始化数组中,需要命名数组命”数据类型 数组名[SIZE]“SIZE表示数组中元素的个数,每一个元素是前面数据类型定义的。
注意在数组的使用中仍然可能存在越界的情况。
程序如下:
#include <stdio.h>int main (void ){ int a[3]={1,2,3}; const int b=0; a[3]=40; printf("b=%d\n",a[3]);return 0;}
通过如上程序,运用a数组越界赋值就能修改b的内容,尽管b是用const修饰的。运行结果如下所示。
由此可知,指针与数组在指向地址的时候有很多类似的地方,但是,数组也有自己独到的地方,比如数组名其实是一个常量,数组名是不能改变的。所以数组名也同样不能运用a++运算。
数组的运用a[i]=XXX,在通常情况下i是大于等于0的,但是如果用a[-1]也是可以得,只是数组越界向下进行指向,编译器是不会报错的。
数组的空间初始化
1、按照标签逐一处理
int a[10];//[0-9] a[0]=xx; a[1]=xx;
2、利用编译器逐一处理:注意第一次的赋值初始化,其具体用法如下所示:
int a[10] ={0,1,2,3,4,5,6,7,8,9};//其实这一部分编译器也会逐一对每个元素进行复制
注意:数组空间的初始化和变量的初始化本质不同,在嵌入式开发过程中,尤其是裸机开发的时候,空间初始化往往需要调用库函数或者单独为之设计程序
char buff[10]={'a','b','c'};
(1)buf存放的数据,对格式没有要求;
(2)buf存放的是字符串,则需要以’/0’作为结束符
char buff[]={"Hello World\n"};char buff[5]={"abc"};char buff[]="abc";//"abc"是可以改变的char *p = "abc";//"abc"是一个常量,不能改变
3、再次赋值:需要对每个元素进行逐一处理。
经典错误:buff=”fgh”;
在C语言中也有一些针对字符串的函数,可以调用 string.h中
#include <stdio.h>#include <string.h>int main (void ){ char buff1[]="Hello World."; char buff2[]="abc"; strcpy(buff1,"abc"); strcpy(buff2,"Hello World"); printf("the buff1 is \" %s\" .\n",buff1 ); printf("The buff2 is \" %s \" .\n",buff2); return 0
虽然数组修改了,但是也出现了一些错误,错误先不进行深入分析。可以看出这个函数虽然功能可以满足复制数组的功能,但是可能存在内存的泄露,在使用中要十分慎重。在通常使用中,常常使用strncpy。
非字符空间
比如数据采集,在AD采集可能存在数据在0x00-0xFF当中。
如果运用 char buf[10]进行声明,可能与字符串产生歧义。因此在实际工程中通常运用 unsigned char buf[10]。
:**注意:1、由于buf中的数据不是字符串,因此不能用string.h的函数。
2、数据的copy通常运用memcpy函数**
函数memcpy (目的地址,源地址,字节):
int buf1[10];int buf2[20];memcpy(buf1,buf2,10*sizeof(int));
指针数组
定义方式:int * a[100],与二级指针类似。
- 数组概述
- 数组概述
- 数组概述
- 数组-数组的概述
- 数组一 数组概述 (c#)
- 数组概述 C#
- C#数组概述
- java数组概述
- 黑马程序员-----数组概述
- 6章 数组概述
- php数组概述
- Java_数组概述
- Java数组小概述
- 差分数组概述
- C++数组概述
- 数组(array)概述
- JavaScript数组对象Array概述
- 数组概述-数组去重-string
- Objective-C内存管理
- NYoj 2 括号配对问题(栈)
- Spring beans架构
- 电脑摄像头开启之后图形倒立
- 上下界网络流学习小记
- 数组概述
- Makefile:2: *** missing separator. Stop. 解决方案
- 欢迎使用CSDN-markdown编辑器
- Java工程师成神之路
- hadoop机架感知--加强集群稳固性,该如何配置hadoop机架感知
- JAVA学习记录 -- 线程Ⅰ
- SPOJ DQUERY树状数组离线or主席树
- JDK,JRE,JVM区别与联系
- Linux下编写线程池