欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言 array數(shù)組的用法詳解

 更新時(shí)間:2021年10月22日 09:54:31   作者:Dark And Grey  
數(shù)組是指一組數(shù)據(jù)的集合,(容器)數(shù)組中的每個(gè)數(shù)據(jù)稱為元素。在Java中,數(shù)組也是Java對(duì)象。數(shù)組中的元素可以是任意類型(包括基本類型和引用類),但同一個(gè)數(shù)組里只能存放類型相同的元素

一維數(shù)組的創(chuàng)建與初始化

數(shù)組是一種相同類型元素的集合

程序一:

#include<stdio.h>
#include<string.h>
int main()
{
創(chuàng)建一個(gè)數(shù)組
int arr1[10];//  [常量]
初始化 int arr[10]={1,2,3};不完全初始化,剩下的元素默認(rèn)初始化0.
char arr2[5];
初始化 char arr[5]={'a','b'};,不完全初始化,剩下元素默認(rèn)初始化0.
初始化 char arr[5]="ab" 這是可行的,因?yàn)殡[藏一個(gè)'\0',后面的0使我們自己給的(這個(gè)字符串都給給它的==),不是系統(tǒng)默認(rèn)



int n = 5;
char ch[n]; 這樣創(chuàng)建數(shù)組是錯(cuò)誤,因?yàn)閚還是變量,值是被賦值了,并不會(huì)改變它的屬性
char arr3[5] = { 'a', 98/*b的ASCII碼等于98*/ };//可行
上式等價(jià)于下式
char arr3[5] = {'a','b'}




char arr4[] = "abcd";//加上后面隱藏的'\0',大小為5
當(dāng)我們并沒(méi)有指定大小的時(shí)候,它會(huì)根據(jù)后面的數(shù)據(jù),自己給定大小

    char  arr5[] = "abcdef";
    printf("%d\n",sizeof(arr5));// 7 sizeof暈倒'\0',把它算進(jìn)去,在停止計(jì)算
    printf("%d\n", strlen(arr5));//6 strlen是遇到'\0'(不包含),就停止計(jì)算
    
    char arr6[] = { 'a', 'b','c','\0' };
    printf("%d\n",strlen(arr6));//如果沒(méi)有'\0'結(jié)束標(biāo)志符,它會(huì)一直算個(gè)數(shù),直到遇到'\0',輸出的是一個(gè)隨機(jī)數(shù)
    printf("%d\n", sizeof(arr6));//沒(méi)有'\0'它就少算一個(gè)就是3
    return 0;
}

程序二:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[] = "abcdef";//元素下標(biāo)是從0開(kāi)始
    pritnf("%c\n",arr[0]); //arr[0] == a,表示首元素a,輸出結(jié)果為a

    如果要依次打印字符串所有元素用循環(huán)更簡(jiǎn)單,字符串的 '\0' 是隱藏的,一般是不用打印的
    int i = 0;
    int len = strlen(arr);// 計(jì)算元素個(gè)數(shù)
    for (i = 0; i < len; i++)
    {
        printf("%c ",arr[i]);// a b c d e f
    }

    return 0;
}

程序三

#include<stdio.h>
int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr) / sizeof(arr[0]);
    // sizeof(數(shù)組名)計(jì)算的整個(gè)數(shù)組的字節(jié)大小,我們只要再求一個(gè)元素的大小就可以了,因?yàn)?數(shù)組是一群相同類型數(shù)據(jù)的集合,所以我
    // 假設(shè) int a[10]; 數(shù)組 a 有 10個(gè) int(4byte) 類型的元素,整個(gè)數(shù)組的大小就是 4*10 == 40 byte, 數(shù)組大小除以數(shù)組元素大小,不就是數(shù)組元素個(gè)數(shù)嘛。(40/4 == 10)
    
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ",arr[i]);
        printf("&arr[%d]=%p\n",i,&arr[i]);// 打印 數(shù)組對(duì)應(yīng)下標(biāo)元素的地址
    }
    
    return 0;
}

程序四(二維數(shù)組 - 二維數(shù)組 的 列 絕對(duì)不能 省略 )

#include<stdio.h>
int main()
{
    ///int arr[3][4];//存儲(chǔ)一個(gè)三行四列的數(shù)據(jù) 3是行(3個(gè)一維數(shù)組),4是列
int arr1[3][4] = {1,2,3,4,5};
假設(shè) 數(shù)據(jù) 是這樣存的,在內(nèi)存是連續(xù)存儲(chǔ)的12345000.....
1234 
5000 
0000

int arr2[3][4] = {  { 1, 2, 3 } , { 4, 5 }   };
 1 2 3 0                      
 4 5 0 0
 0 0 0 0
一行的數(shù)據(jù) 是根據(jù)元素加個(gè)后面的{ },方便你們?nèi)^(qū)分,再根據(jù)列數(shù)確定 一行有多少個(gè)元素

 int arr3[][4] = { { 1, 2, 3 }, { 4, 5 } };
 1 2 3 0
 4 5 0 0
二維數(shù)組不管行還是列,下標(biāo)都是從0開(kāi)始,而且 二維數(shù)組的 行 是可以省略的,它會(huì)根據(jù) 元素 和 列的值,來(lái)確定行數(shù)

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

二維數(shù)組在內(nèi)存中的存儲(chǔ)

在內(nèi)存中實(shí)際存儲(chǔ)情況,第一行完了,第二行緊跟在第一行,第三行緊跟在第二行,int a[2][2]={1,2,3,4}, 在內(nèi)存中存儲(chǔ)情況為 1 2 3 4 (小端)
因?yàn)?數(shù)組的首元素地址是最小的,后面元素,地址依次增大(大約增大 一個(gè)元素的類型的字節(jié)大小)

程序一

#include<stdio.h>
int main()
{
    int arr[3][4] = { { 1, 2, 3 }, { 4, 5 } };
    int i = 0;
    for (i = 0; i < 3; i++)
    {
        int j = 0;
        for (j = 0; j < 4; j++)
        {
            printf("arr[%d][%d]=%p\n", i, j, &arr[i][j]);
            arr[0][3]和arr[1][0]地址相差4,二維數(shù)組與一維數(shù)組一樣,都連續(xù)存儲(chǔ)
        }
    }
    return 0;
}

在這里插入圖片描述

數(shù)組作為函數(shù)參數(shù),怎么作?

實(shí)例:冒泡排序

#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
    
    確定冒號(hào)排序的趟數(shù)
    int i = 0;
    for (i = 0; i < sz - 1; i++)// 排序要排 元素總個(gè)數(shù)-1,最后一個(gè)元素不用排
    {
        int flag = 1;//假設(shè)這一趟的數(shù)據(jù)已經(jīng)有序
       
        int j = 0;
        for (j = 0; j < sz-1-i; j++)//  每一趟冒號(hào)排序的過(guò)程
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 0;//本趟排序的數(shù)據(jù)不完全有序
            }
        }
        if (1 == flag)
        {
            break;
        }
    }
}
int main()
{
    int arr[] = { 0, 8, 7, 6, 5, 4, 3, 2, 1, 9 };
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr,sz);
    對(duì)數(shù)組arr進(jìn)行傳參,傳遞的是數(shù)組arr首元素的地址
    for (i = 0; i < sz; i++)
    {
        printf("%d ",arr[i]);//0,1,2,3,4,5,6,7,8,9
    }
    return 0;
}

數(shù)組名:

#include<stdio.h>
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7 };//數(shù)組隨著下標(biāo)的增長(zhǎng),地址是由低到高變化點(diǎn)

	printf("%p\n",arr);
	數(shù)組名就是數(shù)組首元素地址,是一樣的。見(jiàn)附圖1
	printf("%p\n",&arr[0]);


	但有兩個(gè)意外

	1.sizeof(數(shù)組名) - 數(shù)組名表示整個(gè)數(shù)組 ,計(jì)算的是整個(gè)數(shù)組的大小,單位為字節(jié)(byte)
	int sz = sizeof(arr); 
	printf("%d\n",sz);// 4(元素大小)* 7(元素個(gè)數(shù))== 28,效果見(jiàn)附圖 2


	2.&(數(shù)組名),數(shù)組名代表整個(gè)數(shù)組,&數(shù)組名,取的是整個(gè)數(shù)組的地址
	printf("%p\n", &arr);//表示數(shù)組的起始地址,是整個(gè)數(shù)組的地址
	上下兩者的值一樣,但 意義完全不同,效果圖 見(jiàn)附圖 3
	printf("%p\n", arr);//首元素的地址

    //進(jìn)一步論證  &arr 和 arr的意義完全不同,不同在哪里
    printf("%p\n", &arr+1);//地址增加28字節(jié),一個(gè)元素4byte,7個(gè)元素28字節(jié),意味著 &arr + 1 跳過(guò)一整個(gè)數(shù)組的元素,指向最后一個(gè)元素后面的地址
    printf("%p\n", arr+1);//地址增加4字節(jié),意味著 arr +1,跳過(guò)一個(gè)元素,改地址 arr+1,指向第二個(gè)元素
    效果見(jiàn)附圖 4
    return 0;
}

關(guān)于數(shù)組名,有興趣的,可以看看我這篇文章指針和數(shù)組試題解析(重置版)

附圖1;

在這里插入圖片描述

附圖2:

在這里插入圖片描述

附圖3:

在這里插入圖片描述

附圖4:

在這里插入圖片描述

本文結(jié)束

到此這篇關(guān)于C語(yǔ)言 array數(shù)組的用法詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 array數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論