c語言基礎(五)

2021-08-11 10:10:55 字數 3655 閱讀 9242

型別名(int[10])+變數名(arr):int arr[10]表示包含十個int型別元素的陣列。

定義陣列的時候,陣列的大小就確定了

完全初始化:int arr[s]=;

陣列沒有制定大小,編譯器預設後面的初始化是完全初始化

在陣列中,有{}則初始化,另外上式中5後邊的,不影響

s這個數規定陣列大小,當然也可以不規定陣列的大小,但需要寫出所有元素。

幾個初始化的例子:

char buf=;

char buf=」abc」;

int a=;

部分初始化:int arr_[5] = ;

陣列置零:int arr[5]={};

陣列部分初始化:

int arr[5];

int arr_[5] = ;

int arr_3[5] = {};

int arr_4[5] = ;

陣列元素是從下標為0開始的

注:陣列越界,編譯器不檢查,提高效率(犧牲了安全性)

int arr[s]=;左值右值以等號=分開

左值代表的是記憶體空間,右值代表的是值(記憶體空間的內容)

arr++作為左值?這在c語言中是不被允許的

陣列名不能為左值,陣列名是元素的位址,是常量

即:1.陣列名在程式執行開始就確定了常數字址

2.沒有多位元組的數可以賦值

右值:陣列名可以作為右值,列印的是位址,陣列首元素的首位址

arr,&arr,&arr[0]的值相同,即表達的內容相同。

arr元素的位址,&arr陣列的位址

&是取位址運算子,& a為變數a的位址

*是指標運算子,*p為指標變數,p所指向儲存單元的內容,而指標變數p中一般只存放位址

& arr[0]取陣列首元素的首位址

*arr 取陣列的首位址

傳值呼叫就是左值右值的傳遞

陣列名作為引數時,丟了陣列本身的大小,退化成了乙個指標

陣列名作為引數傳遞的是位址(陣列首元素首位址)

陣列名作為引數,要加上元素個數

#include

void main(void)

printf("\n");

//氣泡排序

//比較陣列裡相鄰兩個數,由小到大

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

}

}printf("---------------排序後-----------\n");

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

printf("\n");

}

#include

void main(void)

printf("\n");

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

printf("---------------排序後-----------\n");

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

}

#include 

//數字進製轉換

void func(void)

printf("輸入要轉換的進製:");

scanf("%d", &b);

//定義乙個陣列,儲存轉換的進製數

char arr[100] = {};

int i = 0;

dowhile (a > 0); i++;

for (i=i-1; i>=0; i--)

else

}printf("\n");

}int main(void)

#include 

//傳值呼叫

//陣列名作為引數,要加上自己的大小(個數)

void func(int arr, int lenth)

int main(void)

; printf("in main arr = %p.\n", arr);

printf("in main sizeof(arr) = %d.\n", sizeof(arr));

//函式呼叫只要傳進去實參的變數名字

func(arr, 10);

printf("arr[1] = %d.\n", arr[1]);

return

0;}

#include 

void func(int arr, int lenth)

for(i=0;iprintf("%d",arr[i]);

}}int main(void)

; func(arr,5);

return

0;}

6.1迴圈
#include 

int search_arr_element(int arr, int left, int right, int data)

else

if (data < arr[mid])

else

}printf("%d查無此數.\n", data);

return -1;

}int main(void)

; search_arr_element(arr, 0, 4, 12);

return

0;}

6.2遞迴
#include 

void search(int arr, int left, int right, int data)

//回歸條件(得到非正確結果)

if (left > right)

if (data > arr[mid])

if (data < arr[mid])

}int main(void)

; search(arr, 0, 4, 12);

return

0;}

6.3利用傳值調換完成陣列迴圈右移
#include 

#include

//迴圈右移:2位->891234567

void func(char buf, int steps)

buf[0] = temp;

}}int main(void)

字串常量char buf_2[ ]=」abc」,sizeof(buf_2)=4

字串常量後有\0

c語言裡沒有字串的原生型別,如string是c++的,所有字串都是以字元陣列的形式儲存在記憶體中

字串相當於提供了乙個首位址,結束』\0』,整個區間就是字串(不包含』\0』)

char *型別指向常量字串

char a型別填寫變數字串

char *p1 = "123";   

char *p2 = "123";

此時p1=p2,因為兩個char *格式的變數都指向了同乙個常量區的字串「123「

char str1 = "123";

char str2 = "123";

此時str1!=str2,因為兩個char型陣列指向了不同的存在於棧中的字串「123「

C語言基礎篇 五

include include struct student 結構體定義一 typedef struct 結構體定義二 newstudent int main int argc,const char argv 注意 結構體定義,在花括號後面加分號 結構體變數初始化 struct 結構體名 變數名 s...

C語言基礎學習(五)

注 關於陣列名的乙個通常兩個例外 char arr 10 1 arr 通常情況表示首元素的位址 2 arr 表示整個陣列的位址 sizeof arr 整個陣列占用記憶體空間大小 基位址 變數的位址值 位址包括兩個方面的內容 乙個叫物件大小 乙個是基位址 32位或者64位 指標 用來儲存位址的變數 指...

C語言基礎五 函式

什麼是函式?函式是封裝起來能實現一定功能的 寫在文中不易體現函式特點,最下方附完整 1.函式定義 需要在主函式之前定義 型別名 函式名 引數 型別名決定函式返回值的資料型別 void型函式不返回值 引數不是必要的,可沒有引數 2.實參與形參 概念 主調函式 呼叫函式的函式 被調函式 被函式呼叫的函式...