当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言数组类型、定义、初始化、遍历讲解

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

2017年12月22日  | 移动技术网IT编程  | 我要评论

黑头是怎么形成的,庞家农场,极乐天尊

一、数组基础

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;
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网