一:数组的概念
1:数组是在程序设计中,为了处理方便, 把具有
相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
二:数组的声明
1: 赋值声明
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
相当于
a[0]=0;a[1]=1...a[9]=9;
注意:这里没有特意在声明的时候说出来这个数组有几个数字,但是这儿我们直接给这个数组赋值了,编译器会自动按赋值的个数来给放扩弧内加上它的个数
2:没有赋值的声明
int aaa[5];
注意:这样的声明就告诉操作系统,我现在需要5个int类型变量的内存空间,5个内存空间的集合叫做aaa,则操作系统就给aaa这个数组预留出5个int值的内存空间
三:数组的下标
aaa[] = {1,1,2,4,5,6}
它的下标如下分布:
数组aaa的第一个值是1,下标为0 第二个值是1,下标为1,第三个值是2则下标为2,第6个值是5它的下标是5,
也就是说从数组的第一个元素开始对应下标为0开始依次增长!
四:多维数组的结构图
--问题
1: 数组结束符\0与0的问题
|
2:C语言数组赋值的问题
|
3:不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式
|
4:&a与&a[0]的区别
|
1:
数组结束符\0与0的问题
#include
#include
int main(int argc,char** argv)
{
char strOne[] = "abcd0xyz";
printf("
strOne is %s\n",
strOne);
char strTwo[] = "abcd\0xyz";
printf("
strTwo is %s\n",
strTwo);
return 0;
}
结果与解析:
strOne is abcd0xyz
strTwo is abcd
由上面可得,\0与0在计算机内部是完全不同的两个东西。‘\0’代表空字符,是字符串与字符数组的结束标志,它的assii码值为0;
字符‘0’的assii码值等于32,不能做为字符串结束标志。故abcd0xyz会原型输出;而abcd\0xyz遇到\0则断
2:C语言数组赋值的问题
int a[3][2] = {0,1,2,3,4,5};
int b[3][2] = {{0,1},{2,3},{4,5}}; -----中括号
int c[3][2] = {(0,1),(2,3),(4,5)}; -----括号
解析:
数组a和数组b的输出是一致的,所以两种赋值方式的效果是一样的,对于数组c,只有前三个元素有值,其他的均是0,而且前三个值分别为1、3、5,这种赋值方式,是以括号为单元,每个单元均
以后面的数值赋给相应的数组元素。数组其他未赋值的元素,以0填充
3:不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式
例如:
#define FD 5
main()
{
int a[3+2],b[7+FD];
……
}
是合法的。但是下述说明方式是错误的。
main()
{
int n=5;
int a[n];
……
}
4:&a与&a[0]的区别
#include
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *p = a; //等价于int *p = &a[0];
//绝不等价于int *p = &a;
int (*pa)[5] = &a;
printf("a = %p, p+1 = %p, pa+1 = %p\n", a, p+1, pa+1);
return 0;
}
解析:
虽然&a与&a[0]的值相同,但它们的数据类型并不相同,a[0]的数据类型为int,而整个数组的数据类型为int [5](是一种组合数据类型,由int和[5]共同决定),所以与&a匹配的指针变量只能是类似于第10行的pa。也就是说,数组单个元素的数据类型和指针变量将要指向的数据类型是一致的。
持续更新.......
阅读(1042) | 评论(0) | 转发(0) |