有讀者反饋,不理解字元陣列和普通陣列的區別,下面筆者作一下解答。
實際上,字元陣列和普通陣列一樣,沒有本質區別。
請大家注意陣列型別的含義:資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。
字元陣列的每個元素都是char型別,整型陣列的每個元素都是int型別。
scanf() 和 printf() 函式有一種格式化字串 %s 可以用來整體輸入輸出字元陣列,但是沒有特定的格式支援 int 陣列整體陣列輸出。
請看下面的**:
#include
intmain
(void);
char
str= ""
;int
i;// num, str 是位址,由系統分配,與陣列本身沒有任何關係
printf
("num = %d, str = %d\n"
, num,
str);
// num, str 指向陣列首位址
printf
("&num[0] = %d, &str[0] = %d\n"
, &num[0],
&str[
0]);
// num 等價於 &num[0]if(
num ==
&num[0])
// str 等價於 &str[0]if(
str ==
&str[0])
// 要為某個陣列元素賦值,必須取該元素的位址
printf
("input a number: "
);scanf
("%c", &
str[
0]);
// scanf() 從 stdin 緩衝區讀取資料
// fflush() 用來清空緩衝區,讓 scanf() 重新從控制台讀取
// 關於 fflush() 詳細解釋請檢視:
c語言fflush()
fflush
(stdin);
printf
("input a char: "
);scanf
("%c", &
str[
0]);
fflush
(stdin);
// 使用 scanf() 為陣列賦值時
// 可以使用 %s 為字元陣列整體賦值
// 但是沒有特定的格式化字串來為 int陣列整體賦值,必須乙個乙個賦值
printf
("input a string: "
);scanf
("%s"
, str);
// str為位址,不需加&
fflush
(stdin);
printf
("input 10 number: "
); // 以空格為間隔
for(i=0
; i<10;
i++)
// 取前5個元素作為示例
printf
("the final num = %d, %d, %d, %d, %d\n"
, num[0],
num[1],
num[2],
num[3],
num[
4]);
printf
("the final str = %s\n"
, str);
return 0;
} 執行結果:
num = 1638176, str = 1638164
&num[0] = 1638176, &str [0] = 1638164
num = &num[0]
str = &str[0]
input a number: 5↙
input a char: e↙
input a string: c語言中文網↙
input 10 number: 12 34 56 78 90 23 45 78 09 54↙
the final num = 12, 34, 56, 78, 90
the final str = c語言中文網
C語言 指標變數作為函式引數詳解
在c語言中,函式的程式設計客棧引數不僅可以是整數 小數 字元等具體的資料,還可以是指向它們的指標。用指標變數作函式引數可以將函式外部的位址傳遞到函式內部,使得在函式內部可以操作函式外部的資料,並且這些資料不會隨著函式的結束而被銷毀。像陣列 字串 動態分配的記憶體等都是一系列資料的集合,沒有辦法通過乙...
指標作為函式引數,C語言指標作為函式引數詳解
include void swap int a,int b 函式宣告 intmain void void swap int a,int b 大家想一下,執行這個程式是否能互換 i 和 j 的值?不能!i 還是3,j 還是5。因為實參和形參之間的傳遞是單向的,只能由實參向形參傳遞。被調函式呼叫完之後系...
11 19C語言 指標變數作為函式引數
今天學習c語言的小結 一 指標變數作為函式引數 函式的引數不僅可以是整型 實型 字元型等資料,還可以是指標型別。它的作用是將乙個變數的位址傳送到另乙個函式中。首先看一下練習題 輸入a和b兩個整數,按先大後小的順序輸出a和b。下面是實現演算法除錯的程式 思路 swap是使用者定義的函式,它的作用是交換...