20171213数组指针
来源:互联网 发布:nba湖人英格拉姆数据 编辑:程序博客网 时间:2024/06/03 20:11
数组
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
数组是具有相同类型的一组数据。当访问数组中的数据时,可以通过下标来指明。数组元素可以为任何数据类型,数组下标从0开始,即第一个元素对应的下标为0,以后逐个递增。数组可以一维也可多维。
1.数组说明的一般形式
类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:
int a[10]; 说明整型数组a,有10个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch,有20个元素。
2. 数组的初始化
(1)我们可以在定义一个数组的同时对它进行初始化操作,例如:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
(2)我们也可以只对数组的部分元素进行初始化操作,例如:
int a[10] = {1, 2, 3, 4, 5};
这里我们只对数组的前5个元素做了初始化操作
(3)如果我们对数组的所有元素都进行了初始化操作,那么我们甚至可以省略数组长度不写,编译器可以根据初始化数组元素的个数自动计算出数组的长度。
int a[] = {11, 7, 6};
3.数组元素的表示方法
在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。
例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量:
for(i=0; i<10; i++)
printf("%d",a[i]);
而不能用一个语句输出整个数组,下面的写法是错误的
printf("%d",a);
4.数组在内存中的存放
数组就是在内存中开辟一块连续的、大小相同的空间,用来存储数据。数组名代表它的首地址。
((int)a+1)是指a地址再加一个字节,直接地址值相加而不是指针 而(a+1)是指指针偏移一个步长(步长等于sizeof(指针指向的元素类型))即4个字节,指向数组第二个元素的地址。 所以(int*)((int)a+1)是第一个数组元素加一个字节。 而数组元素的存放是序号大的元素排在高地址,序号小的排在低地址,而每个元素按高字节放高地址,低字节放低地址
5.字符数组
用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。
他的定义、初始化和引用与其他数组一样
值得注意的是字符数组与字符串的关系(字符数组是一个存储字符的数组,而字符串是一个用双括号括起来的以'\0'结束的字符序列,虽然字符串是存储在字符数组中的,但是一定要注意字符串的结束标志是'\0'。)
(1).字符串结束的标志
我们一般都是需要使用'\0'来表示字符串的而结尾,并且没有影响到相应的数组的操作的其他的内容,而是在系统外部自动添加的。这就是操作系统的问题,所以我们是可以使用'\0'来判断字符串的结束。
(2).字符串中的常量
在对其初始化时的两种方式
1.方式1)char c[]={'I',' ',a','m',' ',h','a','p','p','y','\0'};//就是逐个对应赋值
2.char c[]={"I am happy"};
方式1的字符串的长度是11,方式2的字符串的长度是10
所以:若是,char c[10] = {"china"};
前五个是元素,第六个是'\0',后面的4个也设定了空字符。
总结:字符串并不要求最后一个字符为'\0',甚至可以不包含'\0'。是否需要'\0',系统会自动增加。
(3).字符数组输出
1、逐个字符输入输出,格式符是"%c",循环输出。
2、将整个字符串一起输出。格式符是"%s",表示输出的是字符串
eg:char c[] = {"china"};
prinft("%s",c);
输出时,遇到'%c'就停止输出。输出结果是china
注意:(1)."%s" 在函数中的输出项是字符数组名。
(2).若是数组的长度大于字符串的实际长度,还是遇到'\0'就停止输出。
char c[10]={"china"}; 同样是输出:china 而不是输出10个字符
(3).如果数组中有大于1个'\0'的符号的,遇到第一个'\0'的时候就会停止输出。
6.指针与数组的关系
举一个例子:
int a[10];
int *const p=a
sizeof(a); // 40
sizeof(p); // 8
数组的地址和数组首元素的地址虽然值相同,但意义不同。
值相同是因为,一个变量无论在在内存中占据多大空间,它的地址总是该空间第一个内存单元的地址。而数组的元素依次连续分布在整块数组空间中,数组空间的第一个内存单元被数组首元素占据,必然也同时是数组首元素所占空间的第一块空间单元,所以数组的地址与数组首元素的地址相同。
意义不同是因为,数组地址代表了整块数组所占据的内存空间,而数组首元素的地址只代表了首元素所占据的空间。
&a 表示取数组的地址,其结果是一个指向该数组的指针,它可以赋值给另一个同类型的指针。
&a[0]表示取数组首元素的地址,其结果是指向该数组首元素的指针,可以赋值给另一个同类型的指针。
注意:指向数组的指针和指向数组首元素的指针是两种不同类型的指针。
- 20171213数组指针
- 指针数组、数组指针
- 指针数组/数组指针
- 指针数组/数组指针
- 数组指针 指针数组
- 指针数组,数组指针
- 数组,指针,数组指针
- 数组,指针,数组指针
- 指针数组&数组指针
- 指针数组&数组指针
- 数组指针 指针数组
- 指针数组/数组指针
- 数组指针&指针数组
- 数组指针 指针数组
- 数组指针 指针数组
- 指针数组 数组指针
- 指针数组,数组指针
- 指针数组 数组指针
- Java IO-BufferedReader
- 购物车
- 10_张孝祥_多线程_Callable与Future的应用
- NYOJ 21 三个水杯(BFS)
- Web of Science爬虫实战(Post方法)
- 20171213数组指针
- 兄弟连学Python-Redis基础
- POJ 1077 Eight
- Day010
- mybatis详解-(15)返回结果封装
- Git 实际操作之二
- Oracle配置SQL Developer
- 编码规范(一)----JAVA注释规范
- 利用banner实现图片无限轮播,