6.C语言之数组

来源:互联网 发布:武汉软件工程学院路线 编辑:程序博客网 时间:2024/05/23 00:41

6.1.复合数据类型概述
(1)复合数据类型是指由简单数据类型,经过一定的数据结构封装,组合而成的新的数据类型。譬如数组、结构体、共用体。
(2)数组就是数组成了一个组,数就是一个特定数据类型的变量,组就是很多数放在了一起。


6.2.数组的定义及使用
(1)数组定义:int a[4]; 数组中元素类型 数组名[数组元素个数];数组中的所有元素必须是同一种数据类型。
(2)数组使用:数组使用时不能做为整体使用,必须拆开使用数组中的各个元素。譬如数组int a[4],使用其中的四个元素,分别用a[0]~a[3],其中[]是数组的标志,[]中的数字叫做数组下标(index,索引),下标是我们访问数组中各个元素的指引。下标是0代表数组中第一个元素。如果数组长度为n,下标中最后一个是n-1。访问数组时要特别注意下标,下标是从0开始的,如果下标超出了n-1,会产生越界访问,结果是不可预期的


6.3.数组的初始化
(1)初始化(initinalize,简写为init)是为了让对象有一个预期的初始状态。
(2)简单变量的初始化:当一个局部变量定义时没有初始化,它的值是随机的,如果在编程时没有注意该问题,那么有可能会导致程序出错。所以定义局部变量的同时最好初始化为0,这是一个写代码的好习惯。
(3)数组的初始化:
第1种为完全初始化,依次赋值;
第2种为不完全初始化,初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值,此为GCC特有的初始化方式。


6.4.不同数据类型数组
(1)简单数据类型数组:int a[5];整形数组、float a[5];浮点型数组、double a[5];双精度浮点型数组、char a[5];字符数组。
(2)程序在环境中运行时,需要一定的资源支持。这些资源包括:CPU(运算能力)、内存等。这些资源一般由运行时环境(一般是操作系统)来提供,譬如我们在linux系统上./a.out运行程序时,linux系统为我们提供了运算能力和内存。程序越庞大,运行时消耗的资源越多。譬如内存占用,越大的程序,占用的内存越多。占用内存的其中之一,就是我们在程序中定义的变量。
(3)变量的本质:C语言程序中,变量的实质就是内存中的一个格子。当我们定义(创造一个变量)了一个变量后,就相当于在内存中得到了一个格子,这个格子的名字就是变量名,以后访问这个内存格子就使用该变量名就行了。
(4)数据类型的本质:是内存中格子的不同种类。譬如在32位机器上:short占用2字节空间、int占用4字节空间、float占用4字节空间、double占用8字节空间、char占用1字节空间。


6.5.基础知识
(1)sizeof运算符:返回一个类型或一个变量的内存占用长度,以字节为单位。int a[5];定义整型数组;sizeof(a);测试整个数组所占字节为20;sizeof(a)/sizeof(a[0]); 测试数组中元素个数为5。
(2)字符数组及初始化:
char a[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
char b[] = “abcde”;
sizeof(a);等于5
sizeof(b);等于6
(3)在C语言中引用一个单个字符时,应该用单引号”括起来,譬如’a’。
(4)定义数组同时初始化,则可以省略数组定义时[]中的长度。C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个数。由此可知,省略[]中数组元素个数只有一种情况,那就是后面的初始化式必须为完全初始化。
(5)在C语言中引用一个字符串时,应该用”“括起来,譬如”abcde”。该字符串实际上有6个字符,分别是’a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘\0’。ASCII码表中的第一个字符是’\0’,它的编码值是0,对应的字符是空字符(要用转义字符方式来显示。譬如’\n’表示回车符,’\t’表示Tab,’\0’代表空字符)。’\0’是C语言中定义的字符串的结尾标志。所以,当c语言程序中使用”abcde”这种方式去初始化时,编译器会自动在字符’e’后面添加一个’\0’。于是乎变成了6个字符。


6.array/* * 公司:XXXX * 作者:Rston * 博客:http://blog.csdn.net/rston * GitHub:https://github.com/rston * 项目:C语言之数组 * 功能:定义并初始化数组然后进行引用。 */#include <stdio.h>int main(int argc, char **argv){    int a[4] = {1, 2, 3, 4};    // 定义一个整型数组,里面有4个整型变量    int i;    for (i=0; i<4; i++)         // 通过a[i]引用数组中的整型变量    {        printf("a[%d] = %d.\n", i, a[i]);    }    return 0;}

6.init/* * 公司:XXXX * 作者:Rston * 博客:http://blog.csdn.net/rston * GitHub:https://github.com/rston * 项目:C语言之数组 * 功能:数组的初始化。 */#include <stdio.h>int main(char argc, char **argv){    int i = 0;    //int a[3] = {1, 2, 3};     // 完全初始化,a[0]~a[2]为1、2、3    //int a[3] = {};            // 不完全初始化,a[0]~a[2]为0、0、0    //int a[3] = {1};           // 不完全初始化,a[0]~a[2]为1、0、0    //int a[3];                 // 无初始化,a[0]~a[2]为随机值    int a[3] = {1, [2] = 9};    // gcc特有的初始化a[0]~a[2]为1、0、9    for (i=0; i<3; i++)    {        printf("a[%d] = %d.\n", i, a[i]);    }    return 0;}

6.sizeof/* * 公司:XXXX * 作者:Rston * 博客:http://blog.csdn.net/rston * GitHub:https://github.com/rston * 项目:C语言之数组 * 功能:sizeof运算符。 */#include <stdio.h>int main(int argc, char **argv){    // sizeof测试变量占用内存长度     double a = 15.0;    printf("sizeof(a) = %d.\n", sizeof(a));             // sizeof(a) = 8.    // sizeof测试数据类型占用内存长度    printf("sizeof(char) = %d.\n", sizeof(char));       // sizeof(char) = 1.    printf("sizeof(short) = %d.\n", sizeof(short));     // sizeof(short) = 2.    printf("sizeof(int) = %d.\n", sizeof(int));         // sizeof(int) = 4.    printf("sizeof(long) = %d.\n", sizeof(long));       // sizeof(long) = 4.    printf("sizeof(float) = %d.\n", sizeof(float));     // sizeof(float) = 4.    printf("sizeof(double) = %d.\n", sizeof(double));   // sizeof(double) = 8.    // sizeof测试数组占用内存长度     int b[5];                                           // sizeof(b) = 20. sizeof(b)/sizeof(b[0]) = 5.    printf("sizeof(b) = %d. sizeof(b)/sizeof(b[0]) = %d.\n", sizeof(b), sizeof(b)/sizeof(b[0]));    return 0;}

6.char_array/* * 公司:XXXX * 作者:Rston * 博客:http://blog.csdn.net/rston * GitHub:https://github.com/rston * 项目:C语言之数组 * 功能:字符数组的定义、初始化、引用。 */#include <stdio.h>int main(int argc, char **argv){    char str1[] = {97, 98, 99, 100, 101};       // 5 定义并以整型值方式初始化字符数组    char str2[] = "abcde";                      // 6 定义并以字符串方式初始化字符数组    char str3[] = {'a', 'b', 'c', 'd', 'e'};    // 5 定义并以单个字符的方式初始化数组    char str4[5] = {'a'};                       // GCC特有的初始化,后面的全部填充为0    // sizeof(str1) = 5. sizeof(str2) = 6. sizeof(str3) = 5.    printf("sizeof(str1) = %d. sizeof(str2) = %d. sizeof(str3) = %d.\n", sizeof(str1), sizeof(str2), sizeof(str3));    // str1 = abcdeabcde. str2 = abcde. str3 = abcde. str1属于越界访问了。    printf("str1 = %s. str2 = %s. str3 = %s.\n", str1, str2, str3); // 通过%s整体打印输出字符串数组    // str4 = a.    printf("str4 = %s.\n", str4);    int i = 0;    for (i=0; i<5; i++)                         // 字符数组中单个字符变量的引用    {        printf("str4[%d] = %c \t %d\n", i, str4[i], str4[i]);    }    return 0;}

0 0
原创粉丝点击