日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

五大板块(1)—— 数组的定义,赋值与应用

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五大板块(1)—— 数组的定义,赋值与应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:五大板塊(1)—— 數組的定義,賦值與應用
作者:丶PURSUING
發布時間: 2021-03-18 16:00:05
網址:https://blog.csdn.net/weixin_44742824/article/details/114981166

目錄

  • 數組的定義及訪問
    • 完全初始化,部分初始化,不初始化
    • 關于數組賦值,還需要注意:
      • Ⅰ、大多情況下,數組在定義時必須確定大小
      • Ⅱ 、數組的定義在下面三種情況下不需要指明大小
      • Ⅲ、也不能直接給數組賦值字符串
  • 數組的簡單應用
    • 1到100的和(數組的賦值)
    • 比較5個數的大小(數組的遍歷)
    • 數組作為子函數的形式參數以及數組元素個數計算

數組的定義及訪問

完全初始化,部分初始化,不初始化

#include <stdio.h> #include <string.h>int main() {int i;//不初始化int array1[10];//完全初始化int array2[5]={1,2,3,4,5};//部分初始化int array3[5]={0};for(i=0;i<10;i++){printf("%d ",array1[i]);}putchar('\n');for(i=0;i<5;i++){printf("%d ",array2[i]);}putchar('\n');for(i=0;i<5;i++){printf("%d ",array3[i]);}putchar('\n');return 0; }

運行結果:
可以看到不初始化的時候值是隨機分配的,不建議采用這種方式。

1996072264 1 0 1995852616 67032 66992 0 66376 0 0 1 2 3 4 5 0 0 0 0 0
  • 1
  • 2
  • 3

應該采用部分初始化,初始化第一個元素,其他元素的值默認為0

注意:
數組只有在定義的時候[ ]表示個數,其他時候都是下標。
數組的下標是從0開始,即數組的第一個元素是a[0]。
數組的最后一個元素是a[i-1]

關于數組賦值,還需要注意:

Ⅰ、大多情況下,數組在定義時必須確定大小

例如類似下面的情景,數組定義時大小是不確定的,妄圖通過后續改變的num進行動態賦值,這樣的操作往往出現段錯誤。

#include <stdio.h>int main() {int num;int i;int array[num];printf("需要錄入的學生人數?\n");scanf("%d",&num);//int array[num];for(i=0;i<num;i++){printf("請輸入第%d個學生的成績\n",i+1);scanf("%d",&array[i]);}printf("這些學生的成績是:");for(i=0;i<num;i++){printf("%d ",array[i]);}return 0; }

結果:

Segmentation fault
  • 1

是因為只有數組在定義的時候確定了大小,程序才能根據這個大小分配一段連續的內存空間給數組存放數據。

下面為探索過程-----------------👇

哎,我頭鐵,我就硬是要這樣動態賦值!

  • 會不會是一開始num的值不確定導致的呢?做出如下更改
//int num; int num = 0;
  • 1
  • 2

結果是沒有了段錯誤,但我選擇輸入5個學生的成績,然而輸入2或者3個就停下了,這樣也不行。如下圖:

  • 那我把數組的定義往下移動,放在scanf后面,等num的值確定了我再定義數組總該可以吧?好想法!
scanf("%d",&num); int array[num];
  • 1
  • 2

這樣程序的執行雖無問題,但卻是一個不好的習慣。

C語言變量的定義最好要放在開頭,否則有時候編譯器會報錯的 ,就是要先定義完變量,再做其他事。(是的,但這通常是發生在寫32,51上,Keil的C51所采用的C標準是一個較早期的標準,在程序書寫上有較多的限制。)

而在gcc編譯器中變量的定義卻可以放在程序任何位置。

上面為探索過程-----------------👆

那可咋辦呀?我好想進行動態賦值啊。在錄入成績之前用戶可以選擇錄入幾個人,而不是在程序中寫死,不香嗎??

有啊,別用數組了,用指針唄

#include <stdlib.h> #include <string.h>int main() {int num;int i;int *parray = NULL;//防止野指針printf("需要錄入的學生人數?\n");scanf("%d",&num);// 游標卡尺 開辟空間大小parray = (int *)malloc(sizeof(int) * num);//開辟空間 字節為單位 malloc前相當于游標卡尺memset(parray,0,sizeof(int) * num);//空間初始化for(i=0;i<num;i++){printf("請輸入第%d個學生的成績\n",i+1);scanf("%d",parray++);}printf("這些學生的成績是:");parray -= num;//指針回調,少了這個輸出都是0for(i=0;i<num;i++){printf("%d ",*parray++);}return 0; }

parray++的時候指針已經到達所指向地址空間邊界,要parray -= num回調才能讀到里面的值。

結果:

zhu@ubuntu:~/Desktop$ ./a.out 需要錄入的學生人數? 6 請輸入第1個學生的成績 65 請輸入第2個學生的成績 76 請輸入第3個學生的成績 54 請輸入第4個學生的成績 76 請輸入第5個學生的成績 87 請輸入第6個學生的成績 65 這些學生的成績是:65 76 54 76 87 65

Ⅱ 、數組的定義在下面三種情況下不需要指明大小

①數組是形式參數

正是下文中數組的簡單應用第3個例子

②數組聲明的同時進行了初始化

int a[] = {0,1,2,3};
  • 1

根據實際情況,自動分配大小

③數組的存儲類型為extern

嘿嘿,目前還沒用過,用了來更新。

Ⅲ、也不能直接給數組賦值字符串

這個在下文中結構體的三種定義賦值方法也有涉及,這個情況也多見于結構體。

大致是這樣

#include <stdio.h>int main() {char array[128] = {0};array = "clc mei wo shuai";printf("%s\n",array);return 0; }

或者這樣(這是可以的,前作者有誤)

#include <stdio.h>int main() {char array[128] = "clc mei wo shuai";//array = "clc mei wo shuai";printf("%s\n",array);return 0; }

都會提示錯誤:對具有數組類型的表達式賦值

error: assignment to expression with array type
  • 1

用strcpy函數

#include <stdio.h> #include <string.h>int main() {char array[128] = {0};strcpy(array,"clc mei wo shuai");printf("%s\n",array);return 0; }

成功:

clc mei wo shuai
  • 1

數組的簡單應用

1到100的和(數組的賦值)

#include <stdio.h>int main() {int i;int sum;int array[100];for(i=1;i<=100;i++){array[i-1]=i;}for(i=0;i<=99;i++){sum+=array[i];}printf("sum=%d\n",sum);return 0; }

比較5個數的大小(數組的遍歷)

#include <stdio.h>int main() {int array[5];int max,min;int i;for(i=0;i<5;i++){printf("請輸入%d個數\n",i+1);scanf("%d",&array[i]);}max=array[0];min=array[0];for(i=0;i<5;i++){if(max < array[i]){max = array[i];}if(min > array[i]){min = array[i];}}printf("max=%d,min=%d\n",max,min);return 0; }

數組作為子函數的形式參數以及數組元素個數計算

#include <stdio.h>int arraySum(int array[],int num)//數組形參,僅僅傳遞數組的首地址,代表不了個數。 數組內空間連續 {int sum;int i;for(i=0;i<num;i++){sum+=array[i];}return sum; }int main() {int sum;int array[5]={0,1,2,3,4};// sum=arraySum(array,sizeof(array)/sizeof(array[0])); //傳遞數組名sum=arraySum(&array[0],sizeof(array)/sizeof(array[0]));//或者傳遞首元素的地址(&)//sizeof里面只能傳入數組名 printf("sum=%d\n",sum);return 0; }

①數組形參,僅僅傳遞數組的首地址,代表不了個數(所以個數不必寫出)。
②傳入數組有兩種方式:傳入數組首個元素的地址(&) / 數組名
③而用 sizeof 計算數組大小只能傳入數組名
④計算數組個數:數組大小 / 數組中某個元素的大小(sizeof(array)/sizeof(array[0])

總結

以上是生活随笔為你收集整理的五大板块(1)—— 数组的定义,赋值与应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。