欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:2.c語(yǔ)言數(shù)組

柚子快報(bào)激活碼778899分享:2.c語(yǔ)言數(shù)組

http://yzkb.51969.com/

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

1.1 數(shù)組的創(chuàng)建

數(shù)組是一組相同類(lèi)型元素的集合。 數(shù)組的創(chuàng)建方式:

type_t arr_name [const_n];

//type_t 是指數(shù)組的元素類(lèi)型

//const_n 是一個(gè)常量表達(dá)式,用來(lái)指定數(shù)組的大小

數(shù)組創(chuàng)建的實(shí)例:

//代碼1

int arr1[10];

//代碼2

int count = 10;

int arr2[count];//數(shù)組時(shí)候可以正常創(chuàng)建?

// 在這個(gè)示例中,數(shù)組 arr2 的大小是變量 count 的值,因此在運(yùn)行時(shí)確定。在支持C99標(biāo)準(zhǔn)的編譯器中,這段代碼可以正常編譯和運(yùn)行。

//代碼3

char arr3[10];

float arr4[1];

double arr5[20];

注:數(shù)組創(chuàng)建,在C99標(biāo)準(zhǔn)之前, [ ] 中要給一個(gè)常量才可以,不能使用變量。在C99標(biāo)準(zhǔn)支持了變長(zhǎng)數(shù)組的概念。

1.2 數(shù)組的初始化

數(shù)組的初始化是指,在創(chuàng)建數(shù)組的同時(shí)給數(shù)組的內(nèi)容一些合理初始值(初始化)。

演示代碼:

int arr1[10] = {1,2,3};

int arr2[] = {1,2,3,4};

int arr3[5] = {1,2,3,4,5};

char arr4[3] = {'a',98, 'c'};

char arr5[] = {'a','b','c'};

char arr6[] = "abcdef";

數(shù)組在創(chuàng)建的時(shí)候如果想不指定數(shù)組的確定的大小就得初始化。數(shù)組的元素個(gè)數(shù)根據(jù)初始化的內(nèi)容來(lái)確定。 但是對(duì)于下面的代碼要區(qū)分,內(nèi)存中如何分配

char arr1[] = "abc";

char arr2[3] = {'a','b','c'};

這兩行代碼都涉及字符數(shù)組的聲明和初始化,但是它們的初始化方式略有不同,因此內(nèi)存中的分配也會(huì)有所區(qū)別。

char arr1[] = "abc";:

這行代碼聲明并初始化了一個(gè)字符數(shù)組 arr1,初始化使用了字符串常量 "abc"。在內(nèi)存中,該數(shù)組被分配了足夠的空間來(lái)存儲(chǔ)字符串 "abc",以及字符串末尾的空字符 '\0'。因此,arr1 的大小將是字符串長(zhǎng)度加上一個(gè)額外的空字符的大小。通常情況下,編譯器會(huì)自動(dòng)計(jì)算字符串的長(zhǎng)度并分配足夠的空間。

內(nèi)存分配示意圖:

+---+---+---+---+

| a | b | c | \0|

+---+---+---+---+

| 97| 98| 99| 0 |

+---+---+---+---+

arr1

char arr2[3] = {'a','b','c'};:

這行代碼聲明并初始化了一個(gè)字符數(shù)組 arr2,并顯式地提供了初始化的元素。數(shù)組的大小被指定為 3,因此只有足夠的空間來(lái)存儲(chǔ)給定的元素。由于沒(méi)有為數(shù)組提供額外的空間來(lái)存儲(chǔ)空字符 '\0',因此 arr2 不會(huì)被視為一個(gè)以 null 結(jié)尾的字符串。

內(nèi)存分配示意圖:

+---+---+---+

| a | b | c |

+---+---+---+

| 97| 98| 99|

+---+---+---+

arr2

總結(jié):

char arr1[] = "abc"; 會(huì)自動(dòng)在字符串末尾添加一個(gè)空字符 '\0',而 arr1 可以作為以 null 結(jié)尾的字符串使用。char arr2[3] = {'a','b','c'}; 不會(huì)自動(dòng)添加空字符 '\0',因此 arr2 不會(huì)被視為以 null 結(jié)尾的字符串。

1.3 一維數(shù)組的使用

對(duì)于數(shù)組的使用我們之前介紹了一個(gè)操作符: [ ] ,下標(biāo)引用操作符。它其實(shí)就數(shù)組訪(fǎng)問(wèn)的操作符。

演示代碼:

#include

int main()

{

int arr[10] = { 0 };//數(shù)組的不完全初始化

//計(jì)算數(shù)組的元素個(gè)數(shù)

int sz = sizeof(arr) / sizeof(arr[0]);

//對(duì)數(shù)組內(nèi)容賦值,數(shù)組是使用下標(biāo)來(lái)訪(fǎng)問(wèn)的,下標(biāo)從0開(kāi)始。所以:

int i = 0;//做下標(biāo)

for (i = 0; i < 10; i++)//這里寫(xiě)10,好不好?

{

arr[i] = i;

}

//輸出數(shù)組的內(nèi)容

for (i = 0; i < 10; ++i)

{

printf("%d ", arr[i]);

}

return 0;

}

int arr[10] = { 0 };

int sz = sizeof(arr) / sizeof(arr[0]);

這段代碼聲明了一個(gè)包含10個(gè)整數(shù)的數(shù)組 arr,并且將所有元素初始化為0。然后,通過(guò)計(jì)算數(shù)組的總大小除以數(shù)組中單個(gè)元素的大小,得到了數(shù)組的長(zhǎng)度。

讓我們來(lái)逐步解釋這段代碼:

int arr[10] = { 0 };:這行代碼聲明了一個(gè)名為 arr 的整型數(shù)組,有10個(gè)元素。數(shù)組的所有元素都被初始化為0,這是由初始化列表 { 0 } 實(shí)現(xiàn)的。如果初始化列表中提供的元素少于數(shù)組的長(zhǎng)度,那么剩余的元素將被初始化為0。 int sz = sizeof(arr) / sizeof(arr[0]);:這行代碼計(jì)算了數(shù)組 arr 的長(zhǎng)度。sizeof(arr) 返回整個(gè)數(shù)組 arr 占用的字節(jié)數(shù),而 sizeof(arr[0]) 返回?cái)?shù)組中第一個(gè)元素的大?。ㄍǔG闆r下,這與整個(gè)數(shù)組的大小相同)。通過(guò)將整個(gè)數(shù)組的大小除以單個(gè)元素的大小,可以得到數(shù)組中元素的個(gè)數(shù)。

因此,sz 的值將是數(shù)組 arr 的長(zhǎng)度,即10。這種計(jì)算數(shù)組長(zhǎng)度的方法是一種常見(jiàn)的做法,可以確保在改變數(shù)組大小時(shí)代碼仍然正確地計(jì)算數(shù)組的長(zhǎng)度。

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

探討數(shù)組在內(nèi)存中的存儲(chǔ)。

#include

int main()

{

int arr[10] = { 0 };

int i = 0;

int sz = sizeof(arr) / sizeof(arr[0]);

for (i = 0; i < sz; ++i)

{

printf("&arr[%d] = %p\n", i, &arr[i]);

}

return 0;

}

打印結(jié)果:

仔細(xì)觀(guān)察輸出的結(jié)果,我們知道,隨著數(shù)組下標(biāo)的增長(zhǎng),元素的地址,也在有規(guī)律的遞增。 由此可以得出結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的。

2. 二維數(shù)組的創(chuàng)建和初始化

2.1 二維數(shù)組的創(chuàng)建

//數(shù)組創(chuàng)建

int arr[3][4]; // 這是一個(gè)三行四列的二維數(shù)組

char arr[3][5];

double arr[2][4];

2.2 二維數(shù)組的初始化

//數(shù)組初始化

int arr[3][4] = {1,2,3,4}; // 1,2,3,4為第一行;其他元素為0

int arr[3][4] = {{1,2},{4,5}}; // 將1,2放在第一行;3,4放在第二行;其他元素為0

int arr[][4] = {{2,3},{4,5}}; //二維數(shù)組如果有初始化,行可以省略,列不能省略

2.3 二維數(shù)組的使用

二維數(shù)組的使用也是通過(guò)下標(biāo)的方式。

#include

int main()

{

int arr[3][4] = {0};

int i = 0;

for (i = 0; i < 3; i++)

{

int j = 0;

for (j = 0; j < 4; j++)

{

arr[i][j] = i * 4 + j;

}

}

for (i = 0; i < 3; i++)

{

int j = 0;

for (j = 0; j < 4; j++)

{

printf("%d ", arr[i][j]);

}

}

return 0;

}

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

#include

int main()

{

int arr[3][4];

int i = 0;

for (i = 0; i < 3; i++)

{

int j = 0;

for (j = 0; j < 4; j++)

{

// %p 控制符并將一個(gè)指針作為參數(shù)傳遞給 printf 函數(shù)時(shí),它會(huì)打印出指針?biāo)赶虻膬?nèi)存地址。通常情況下,它會(huì)以十六進(jìn)制的形式打印出指針的值。

printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);

}

}

return 0;

}

通過(guò)結(jié)果我們可以分析到,其實(shí)二維數(shù)組在內(nèi)存中也是連續(xù)存儲(chǔ)的。

3. 數(shù)組越界

數(shù)組的下標(biāo)是有范圍限制的。 數(shù)組的下規(guī)定是從0開(kāi)始的,如果數(shù)組有n個(gè)元素,最后一個(gè)元素的下標(biāo)就是n-1。 所以數(shù)組的下標(biāo)如果小于0,或者大于n-1,就是數(shù)組越界訪(fǎng)問(wèn)了,超出了數(shù)組合法空間的訪(fǎng)問(wèn)。 C語(yǔ)言本身是不做數(shù)組下標(biāo)的越界檢查,編譯器也不一定報(bào)錯(cuò),但是編譯器不報(bào)錯(cuò),并不意味著程序就 是正確的, 所以程序員寫(xiě)代碼時(shí),最好自己做越界的檢查。

#include

int main()

{

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

int i = 0;

for (i = 0; i <= 10; i++)

{

printf("%d\n", arr[i]); //當(dāng)i等于10的時(shí)候,越界訪(fǎng)問(wèn)了

}

return 0;

}

二維數(shù)組的行和列也可能存在越界。

4. 數(shù)組作為函數(shù)參數(shù)

4.1 冒泡排序函數(shù)的錯(cuò)誤設(shè)計(jì)

//方法1:

#include

// void bubble_sort(int* p)

void bubble_sort(int arr[])

{

//這樣對(duì)嗎?(此處是錯(cuò)誤的)

int sz = sizeof(arr) / sizeof(arr[0]);

int i = 0;

for (i = 0; i < sz - 1; i++)

{

int j = 0;

for (j = 0; j < sz - i - 1; j++)

{

if (arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}

}

int main()

{

int arr[] = { 3,1,7,5,8,9,0,2,4,6 };

bubble_sort(arr);//是否可以正常排序?

for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)

{

printf("%d ", arr[i]);

}

return 0;

}

解析:

在這段代碼中,主要問(wèn)題出現(xiàn)在 bubble_sort 函數(shù)內(nèi)部的 sz 的計(jì)算上:

int sz = sizeof(arr)/sizeof(arr[0]);

這里的錯(cuò)誤在于 arr 是一個(gè)指向整型數(shù)組的指針,而不是一個(gè)數(shù)組,因此 sizeof(arr) 將返回指針的大小,而不是數(shù)組的大小。在函數(shù)參數(shù)中聲明一個(gè)數(shù)組時(shí),其實(shí)質(zhì)是將數(shù)組作為指針傳遞給函數(shù),因此 sizeof(arr) 將返回指針的大小,而不是數(shù)組的大小。

要解決這個(gè)問(wèn)題,可以將數(shù)組的大小作為額外的參數(shù)傳遞給 bubble_sort 函數(shù),或者使用動(dòng)態(tài)數(shù)組,或者使用全局?jǐn)?shù)組。以下是一種修正方法:

#include

void bubble_sort(int arr[], int sz) {

int i, j;

for(i = 0; i < sz - 1; i++) {

for(j = 0; j < sz - i - 1; j++) {

if(arr[j] > arr[j + 1]) {

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}

}

int main() {

int arr[] = {3,1,7,5,8,9,0,2,4,6};

int sz = sizeof(arr) / sizeof(arr[0]);

bubble_sort(arr, sz);

for(int i = 0; i < sz; i++) {

printf("%d ", arr[i]);

}

return 0;

}

在這個(gè)修正后的代碼中,bubble_sort 函數(shù)接受額外的參數(shù) sz,用于傳遞數(shù)組的大小。在 main 函數(shù)中,使用 sizeof 操作符計(jì)算了數(shù)組 arr 的大小,并將其作為參數(shù)傳遞給 bubble_sort 函數(shù)。

4.2 數(shù)組名是什么?

#include

int main()

{

int arr[10] = {1,2,3,4,5};

// 數(shù)組名arr就相當(dāng)于首元素地址,即相當(dāng)于&arr[0]

printf("%p\n", arr);

// &arr[0]是數(shù)組首元素的地址

printf("%p\n", &arr[0]);

// *arr 是一個(gè)指針解引用操作,它指向數(shù)組 arr 的第一個(gè)元素

printf("%d\n", *arr);

// 輸出結(jié)果

return 0;

}

數(shù)組名確實(shí)能表示首元素的地址,但是有2個(gè)例外

1.sizeof(數(shù)組名),這里的數(shù)組名表示的是整個(gè)數(shù)組,計(jì)算的是整個(gè)數(shù)組的大小,單位是字節(jié)

2.&數(shù)組名,這里的數(shù)組名表示整個(gè)數(shù)組,取出的是整個(gè)數(shù)組的地址

arr+1 或者 &arr[0]+1 首元素的地址加4個(gè)字節(jié);

&arr+1(跳過(guò)整個(gè)數(shù)組 以arr[10]={0}為例 &arr+1表示arr[10]的地址加40字節(jié) )

補(bǔ)充:

sizeof(數(shù)組名),計(jì)算整個(gè)數(shù)組的大小,sizeof內(nèi)部單獨(dú)放一個(gè)數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。&數(shù)組名,取出的是數(shù)組的地址。&數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

作,它指向數(shù)組 arr 的第一個(gè)元素 printf(“%d\n”, *arr); // 輸出結(jié)果 return 0; }

數(shù)組名確實(shí)能表示首元素的地址,但是有2個(gè)例外 1.sizeof(數(shù)組名),這里的數(shù)組名表示的是整個(gè)數(shù)組,計(jì)算的是整個(gè)數(shù)組的大小,單位是字節(jié) 2.&數(shù)組名,這里的數(shù)組名表示整個(gè)數(shù)組,取出的是整個(gè)數(shù)組的地址

arr+1 或者 &arr[0]+1 首元素的地址加4個(gè)字節(jié); &arr+1(跳過(guò)整個(gè)數(shù)組 以arr[10]={0}為例 &arr+1表示arr[10]的地址加40字節(jié) )

補(bǔ)充:

> 1. sizeof(數(shù)組名),計(jì)算整個(gè)數(shù)組的大小,sizeof內(nèi)部單獨(dú)放一個(gè)數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

> 2. &數(shù)組名,取出的是數(shù)組的地址。&數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

除此以上兩種情況之外,所有的數(shù)組名都表示數(shù)組首元素的地址。

柚子快報(bào)激活碼778899分享:2.c語(yǔ)言數(shù)組

http://yzkb.51969.com/

相關(guān)文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18911628.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪(fǎng)問(wèn)

文章目錄