最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年10月22日 09:54:31   作者:Dark And Grey  
數(shù)組是指一組數(shù)據(jù)的集合,(容器)數(shù)組中的每個(gè)數(shù)據(jù)稱為元素。在Java中,數(shù)組也是Java對象。數(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)閚還是變量,值是被賦值了,并不會改變它的屬性
char arr3[5] = { 'a', 98/*b的ASCII碼等于98*/ };//可行
上式等價(jià)于下式
char arr3[5] = {'a','b'}




char arr4[] = "abcd";//加上后面隱藏的'\0',大小為5
當(dāng)我們并沒有指定大小的時(shí)候,它會根據(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));//如果沒有'\0'結(jié)束標(biāo)志符,它會一直算個(gè)數(shù),直到遇到'\0',輸出的是一個(gè)隨機(jī)數(shù)
    printf("%d\n", sizeof(arr6));//沒有'\0'它就少算一個(gè)就是3
    return 0;
}

程序二:

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

    如果要依次打印字符串所有元素用循環(huá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ù)組對應(yīng)下標(biāo)元素的地址
    }
    
    return 0;
}

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

#include<stdio.h>
int main()
{
    ///int arr[3][4];//存儲一個(gè)三行四列的數(shù)據(jù) 3是行(3個(gè)一維數(shù)組),4是列
int arr1[3][4] = {1,2,3,4,5};
假設(shè) 數(shù)據(jù) 是這樣存的,在內(nèi)存是連續(xù)存儲的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開始,而且 二維數(shù)組的 行 是可以省略的,它會根據(jù) 元素 和 列的值,來確定行數(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)存中的存儲

在內(nèi)存中實(shí)際存儲情況,第一行完了,第二行緊跟在第一行,第三行緊跟在第二行,int a[2][2]={1,2,3,4}, 在內(nèi)存中存儲情況為 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ù)存儲
        }
    }
    return 0;
}

在這里插入圖片描述

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

實(shí)例:冒泡排序

#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
    
    確定冒號排序的趟數(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++)//  每一趟冒號排序的過程
        {
            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);
    對數(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)的增長,地址是由低到高變化點(diǎn)

	printf("%p\n",arr);
	數(shù)組名就是數(shù)組首元素地址,是一樣的。見附圖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,效果見附圖 2


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

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

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

附圖1;

在這里插入圖片描述

附圖2:

在這里插入圖片描述

附圖3:

在這里插入圖片描述

附圖4:

在這里插入圖片描述

本文結(jié)束

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

相關(guān)文章

  • C語言算術(shù)運(yùn)算符整理

    C語言算術(shù)運(yùn)算符整理

    算術(shù)運(yùn)算符用于各類數(shù)值運(yùn)算,包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種
    2023-03-03
  • 指向變量的常指針與指向常變量的指針詳細(xì)解析

    指向變量的常指針與指向常變量的指針詳細(xì)解析

    剛接觸到指針時(shí),關(guān)于指向變量的常指針和指向常變量的指針容易混淆,所以整理下,希望能夠幫助自己也幫助到大家
    2013-10-10
  • 淺談C++ Explicit Constructors(顯式構(gòu)造函數(shù))

    淺談C++ Explicit Constructors(顯式構(gòu)造函數(shù))

    下面小編就為大家?guī)硪黄獪\談C++ Explicit Constructors(顯式構(gòu)造函數(shù))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 基于C++全局變量的聲明與定義的詳解

    基于C++全局變量的聲明與定義的詳解

    本篇文章是對C++全局變量的聲明與定義進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解

    C語言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解

    順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。本文將通過示例為大家講解一下順序表的基本操作,需要的可以參考一下
    2023-02-02
  • C語言工程文件該如何寫(以三子棋游戲?yàn)槔?

    C語言工程文件該如何寫(以三子棋游戲?yàn)槔?

    工程上寫代碼應(yīng)分為多個(gè)文件,那么你知道C語言工程文件該如何寫嗎,本文就以以三子棋游戲?yàn)槔?介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C語言平衡二叉樹詳解

    C語言平衡二叉樹詳解

    這篇文章主要介紹了C語言平衡二叉樹的相關(guān)資料,需要的朋友可以參考下,小編覺得這篇文章寫的還不錯(cuò),希望能夠給你帶來幫助
    2021-11-11
  • C迷途指針詳解

    C迷途指針詳解

    這篇文章主要介紹了C迷途指針,迷途指針又稱為懸空指針、野指針,其對C程序的安全性與穩(wěn)定性影響巨大,本文對其原理與檢測方法做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • Opencv實(shí)現(xiàn)綠幕視頻背景替換功能

    Opencv實(shí)現(xiàn)綠幕視頻背景替換功能

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)綠幕視頻背景替換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C語言實(shí)現(xiàn)俄羅斯方塊小游戲

    C語言實(shí)現(xiàn)俄羅斯方塊小游戲

    這篇文章主要為大家詳細(xì)介紹了Linux下C語言實(shí)現(xiàn)俄羅斯方塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

开原市| 新化县| 延津县| 青岛市| 明水县| 汾阳市| 芒康县| 玛纳斯县| 荥经县| 蓝山县| 习水县| 井冈山市| 灌南县| 双牌县| 大荔县| 吉水县| 南郑县| 吉林市| 城固县| 霍林郭勒市| 汤阴县| 平昌县| 千阳县| 祥云县| 略阳县| 白朗县| 织金县| 黄平县| 东莞市| 南岸区| 吉水县| 峨眉山市| 项城市| 阳信县| 卢湾区| 娱乐| 望谟县| 古浪县| 大竹县| 青阳县| 兰西县|