欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言数组类型、定义、初始化、遍历讲解

程序员文章站 2022-06-24 20:17:40
一、数组基础 1、数组的类型: 元素类型名[元素个数] 2、数组的定义: 元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr: int...

一、数组基础

1、数组的类型:

元素类型名[元素个数]

2、数组的定义:

元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr:

int arr[10];//int为元素的类型,不是数组的类型,数组是int[10]类型的。

3、数组的初始化

数组的初始化分为完全初始化和部分初始化。

int arr[5] = {1, 2, 3, 4, 5};//完全初始化。
//完全初始化即为给数组的每个元素都赋值。
int arr2[5] = {1, 2};        //部分初始化。
//部分初始化为给数组的部分元素赋值,其余元素为随机值。
int arr3[5] = {};            //数组置零,即全部元素的值都为零。

4、数组遍历

编译器不会检查数组是否越界,可提高编译效率

数组遍历输入

void scfarr(int arr[], int len)
{
    int i = 0;
    for(i=0; i


数组遍历输出
void prtarr(int arr[], int len)
{
    int i = 0;
    for(i=0; i5、数组名作为左值和右值


右值: 

数组名arr作为右值代表第一个元素的首地址。
&arr代表数组的首地址,与arr数值相等,代表含义不同,(&arr+1)代表整个数组的后一项。
左值: 

左值代表的是变量所对应的内存空间,数组作为一个整体,没有匹配的数值与其空间对应。 

故数组不能作为左值,只能被初始化。6、传值调用


数组名作为参数,要加上元素个数。
数组名作为参数传递的是数组首元素首地址。
数组名作为参数时,丢失了数组本身的大小,退化成了一个指针 。
子函数对数组的操作会改变元素的值,但不会改变元素的地址,在子函数内改变的地址作为形参在子函数结束时被销毁。二、数组的应用1、冒泡排序
void mppx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
    int i = 0, j = 0, tem = 0;
    for(i=0; iarr[j+1])
            {
                tem = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tem;
            }
        }
    }
    return;
}

2、选择排序

void xzpx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
    int i = 0, j = 0, tem = 0;
    for(i=0; iarr[j])
            {
                tem = arr[j];
                arr[j] = arr[i];
                arr[i] = tem;
            }
        }
    }
    return;
}

3、进制转换

int fun(void) 
{ 
    char arr[100]={0}, i = 0; 
    int a = 0, b = 0; 
    printf("输个数!\n"); 
    scanf("%d",&a); 
    printf("几进制?\n"); 
    scanf("%d",&b); 
    do 
    {
        arr[i] = a % b;
        a = a / b; 
        i++; 
    }while(a > 0); 
    for(i=i-1; i>=0;i--) 
    { 
        if(arr[i] < 10) 
        printf("%d",arr[i]);
        else 
        printf("%c",arr[i]-10+'A');
    } 
} 

4、二分法查找数据的角标

#include 


int search_arr_element(int arr[], int left, int right, int data);


void main(void)
{
    int arr[5] = {1, 2, 3, 4, 5};
    printf("%d\n",find_data(arr, arr[0], arr[4], 5));
    return;
}



int find_data(int arr[], int left, int right, int data)
{
    int mid = 0;
    while (left <= right)
    {   
        mid = (left+right) / 2;
        if(data > arr[mid])
        {
            left = mid + 1;
        }
        else if(data < arr[mid])
        {
            right = mid - 1;
        }
        else
        {   
            return mid;
        }
    }
    return -1;
}

5、循环右移

#include 
#include 

void right(char arr[], int wei);

void main(void)
{
    char arr[] = "qaujetg";
    int a = 0;
    printf("几位?\n");
    scanf("%d", &a);
    right(arr, a);
    printf("%s\n", arr);
    return;
}


void right(char arr[], int wei)
{
    int i = 0, j = 0, tem = 0, len = strlen(arr);
    for(i=0; i0; j--)
        arr[j] = arr[j-1];
        arr[0] = tem;
    }
    return;
}
;>
;>