JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

C语言 技能提升 系列文章(二) 数组

wys521 2024-11-16 01:45:43 精选教程 23 ℃ 0 评论

今天,来跟大家聊一聊C语言中的数组。



数组的定义

数组是一种在内存中连续存储的数据集合,集合中的数据具有相同的类型。

这些数据通过他们共用的数组名加各自的索引值进行读取/存储。

数组的声明

语法 :typename array_name[array_size];

int intArray[ 10 ];
float floatArray[ 1000 ];
int tableArray[ 3 ][ 5 ];      /* 3 行,5列  */

const int NROWS = 100;    
float matrix[ NROWS ][ NCOLS ];
// C99
int numElements;
printf( "How big an array do you want? " );
scanf( "%d", &numElements; )
if( numElements <= 0 ) {
    printf( "Error - Quitting\n" );
    exit( 0 );
}

double data[ numElements ];    // This only works in C99, not in plain C

数组的初始化

typename array_name[array_size] = { init_data };

int intArray[ 6 ] = { 1, 2, 3, 4, 5, 6 };
float floatArray[ 100 ] = { 1.0f, 5.0f, 20.0f };
double  piFractions[ ] = { 3.141592654, 1.570796327, 0.785398163 };

// 二维数组
int a[ 2 ][ 3 ] = { { 5, 6, 7 }, { 10, 20, 30 } };
// 三维数组
int b[ 2 ][ 3 ][4] = { 
                                 { {5,6,7,8}, 
                                   {6,7,8,9}, 
                                   {7,8,9,10} }, 
                                 { {8,9,10,11}, 
                                   {9,10,11,12},
                                   {10,11,12,13} } 
                               };

// C99 :支持对某一个特定的元素进行初始化
int numbers[ 100 ] = { 1, 2, 3, [10] = 10, 11, 12, [60] = 50, [42] = 420 };

// 这样子赋值,能够保证数组的所有元素都被赋值为0x00
int intArray[5] = { };

for(int i=0; i<5; i++)
{
  printf("intArray[%d] = %d\n", i,intArray[i]);
}

Output:                                                                                                                                       
intArray[0] = 0                                                                                                                               
intArray[1] = 0                                                                                                                               
intArray[2] = 0                                                                                                                               
intArray[3] = 0                                                                                                                               
intArray[4] = 0

// 但如果是,int intArray[x] = { 1 };  呢?
// 编译器只会把第一个元素赋值为1
int intArray[5] = {1 };

for(int i=0; i<5; i++)
{
  printf("intArray[%d] = %d\n", i,intArray[i]);
}
Output:                                                                                                                                                                      
intArray[0] = 1                                                                                                                                                              
intArray[1] = 0                                                                                                                                                              
intArray[2] = 0                                                                                                                                                              
intArray[3] = 0                                                                                                                                                              
intArray[4] = 0


数组的操作

数组在内存中连续存储这一特性,让数组名和指针之前的界限非常模糊。也正因为这一特点,决定了程序员能够对数组所进行的操作。

// 我们现便利输出我们的数组
    int intArray[ 6 ] = { 1, 2, 3, 4, 5, 6 };
    
    printf("intArray : ");
    for(int i=0; i<6; i++)
    {
        printf("%d ", intArray[i]);
    }
    printf("\n");


// 数组名在某些场合是可以当作指针来用的    
// 下面的两次输出内容是一样的
    printf("IntArray[3] = %d\n", *(intArray+3));    
    int *pIntArray = intArray;
    printf("pIntArray[3] = %d\n", *(pIntArray+3));

// 计算数组的内存大小
// 下面的代码会输出24,因为int型占4个字节,整个数组占24个字节
printf("sizeof intArray = %lu\n", sizeof intArray);  
// 而我们如果用同样的方法打印一个指向这个数组的指针呢?
// 结果取决于当前机器的字长,64位机器结果是8,32位机器结果是4
// 记住,这就是数组名和指针的区别。
printf("sizeof pIntArray = %lu\n", sizeof pIntArray);

// 计算数组有多少个元素
// 计算结果就是6
printf(" intArray count = %lu\n", sizeof(intArray)/sizeof(int));  


// 二维数组
// 上面的例子说明了,intArray+3 等于 intArray[3]
// 那么对于二维数组呢? 下面的 a + 2 等于什么?
// 我是这样理解的,a是一个二维数组,它同时也是一个一位数组
// 这个一维数组的成员是另外两个一维数组

int a[ 2 ][ 3 ] = { { 5, 6, 7 }, { 10, 20, 30 } };

// 下面的代码输出 : size of a[1] = 12 
// 正好是一个有三个元素的一维数组的大小
printf("size of a[1] = %d \n", sizeof (a[1]));

以上,就是今天要和大家分享的内容。希望对大家有所帮助。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表