Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158948
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-23 15:21
文章分类

全部博文(66)

文章存档

2016年(66)

我的朋友

分类: LINUX

2016-04-28 22:38:35

一:数组的概念

    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("strTwis %s\n", strTwo);

    return 0;
}

结果与解析:
strOne is  abcd0xyz

strTwis 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。也就是说,数组单个元素的数据类型和指针变量将要指向的数据类型是一致的。



持续更新.......





阅读(1010) | 评论(0) | 转发(0) |
0

上一篇:Linux环境变量

下一篇:消除文件空行

给主人留下些什么吧!~~