🌹作者:雲小逸
📝個人首頁:[雲小揚的首頁]
📝碼雲:雲小揚 (YunXiaoYang003) - Gitee.com
🤟motto:要敢于一個人默默的面對自己,==強大自己才是核心==。不要等到什麼都沒有了,才下定決心去做。種一顆樹,最好的時間是十年前,其次就是現在!學會自己和解,與過去和解,努力愛自己。==希望春天來之前,我們一起面朝大海,春暖花開==!🤟
👏專欄:C語言初階👏專欄:C語言進階👏專欄:資料結構和算法👏
👏專欄:C++初階---👏專欄:C++進階--👏專欄:Linux學習👏
(文章目錄)
前言
——————————————————————————————
首先先寫上幾句話:獻給堅持創作的我和點開這篇文章希望進步的你
躺平,才是對這個時代最大的辜負。
中國,就是這個世界上最欣欣向榮的國家。
經濟發展的四大要素(技術、人才、市場、資金),在中國自由流通。
打開招聘網站,有成千上萬的崗位等你投遞。
想當老闆的人們,恭喜你!辦理營業執照免費!
以前,你要租個店面才能營業。
如今,你注冊個閑魚就能賣貨。
你說,躺平是因為"沒有希望"。
我覺得,躺平恰恰是遠離了"饑寒交迫",走向了"好逸惡勞"。
躺平,就是對這個時代最大的辜負。
==一維數組==
1.一維數組的建立
數組是一組相同類型元素的集合
type_t arr_name [const_n];
//type_t 是指數組的元素類型
//const_n 是一個常量表達式,用來指定數組的大小
注:C99标準之前是不支援使用變量的,隻能是常量,
C99标準之後增加了變長數組的概念,允許數組的大小為變量,
如果使用變長數組,則要求編碼器支援C99标準,VS對C99支援不是很好。
數組的執行個體
//代碼1
int arr1[10];
//代碼2
int count = 10;
int arr2[count];//數組時候可以正常建立?
//代碼3
char arr3[10];
float arr4[1];
double arr5[20];
2.一維數組的初始化
數組的初始化是指,在建立數組的同時給數組的内容一些合理初始值(初始化)。
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int arr1[10] = {1,2,3};//不完全初始化,剩餘元素預設初始化為0
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";
==sizeof:計算數組的大小(包含\0),任何例型大小均可以,操作符
strlen: 計算\0之前那的字元,僅僅計算字元串的長度,庫函數==
- 數組是使用下标來通路的,下标是從0開始。
- 數組的大小可以通過計算得到:sz=sizeof(arr)/sizeof(arr[0)
3.一維數組在記憶體中的存儲(==十六進制==)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
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;
}
總結:1.一維數組在記憶體中是連續存放
2.随着下标增長,位址由高到低變化的
二維數組
1.二維數組的建立和初始化
//數組初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};//二維數組如果有初始化,行可以省略,列不能省略
二維數組中行可以省略,列不可以省略
2.二維數組在記憶體中的存儲
總結:
1.二維數組在記憶體中是連續存放的
2.以一維數組的形式存放
數組越界
數組的下标是有範圍限制的。
數組的下規定是從0開始的,如果數組有n個元素,最後一個元素的下标就是n-1。
是以數組的下标如果小于0,或者大于n-1,就是數組越界通路了,超出了數組合法空間的通路。
C語言本身是不做數組下标的越界檢查,編譯器也不一定報錯,但是編譯器不報錯,并不意味着程式就是正确的,
是以程式員寫代碼時,最好自己做越界的檢查。
發生數組越界,将會發生兩種情況:
1.stack aroud the variable 'arr'was corrupted//編譯器儲存
2.0 1 2 3 4 5 6 7 8 9 -858993460//編譯器不報錯
數組作為函數參數
冒泡排序的錯誤設計
//冒泡排序的錯誤設計
#include<stdio.h>
void bubble_sort(int arr[])
{
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0, j = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main(void)
{
int arr[10] = { 3,4,8,9,6,7,10,1,2,5 };
bubble_sort(arr);
int i = 0;
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
錯誤原因: 實際數組傳參傳遞的不是整個數組,而是首元素位址。
則void bubble_sort(int arr[])本質上是void bubble_sort(int arr);
是以sizeof(arr)為sizeof(int)等于4,故sz=1,是以不會發生預想結果**
冒泡排序的正确設計
改正:
1.将sz=sizeof(arr)/sizeof(arr[0])移到主函數
2.将函數調用修改為bubble_sort(arr,sz);
3.将函數參數改為(int *arr,int sz)
//冒泡排序的正确設計
#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
int i = 0, j = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main(void)
{
int arr[10] = { 3,4,8,9,6,7,10,1,2,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);
int i = 0;
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
數組名
1.一般情況下,數組名是首元素的位址。
2.特例:
(1) sizeof(數組名),計算整個數組的大小,sizeof内部單獨放一個數組名,數組名表示整個數
組。
(2) &數組名,取出的是數組的位址。&數組名,數組名表示整個數組。
#include<stdio.h>
int main(void)
{
int arr[10] = { 1,2,3,4,5,6,7,8,9 };
printf("%p\n", &arr);
printf("%p\n", &arr + 1);
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0] + 1);
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", sizeof(arr));
return 0;
}
最後
十分感謝你可以耐着性子把它讀完和我可以堅持寫到這裡,送幾句話,對你,也對我:
你太急切的想要一個答案了。想要==風光的學位==,瞬間的博學,想要意氣風發,想閃着金光走向喜歡的人。
但現實告訴我,==操之過急便會敗北==,他要我等,要我耐得住不斷延長的時間線,要我傳遞出足夠的努力堆砌在沉悶、晦澀的時光裡,才肯将一切“我想要”一點一點遞送至我手裡。
“我知道你最近很累,是那種看不見的,==身體上和精神上的疲憊感==,但是請你一定要==堅持下去==。
就算無人問津也好,技不如人也罷,千萬别讓煩惱和焦慮毀了你本就不多的熱情和定力。别貪心,我們不可能什麼都有,别擔心,我們也不可能什麼都沒有。”