C語言陣列
陣列初始化
- 連寫
char name[16] = {"XXL");//這種定義是合法的
char name[16];//
name = {"xxl"};//這種初始化是非法的
- 下標
int a[3];
a[1] = 100;
a[2] = 200;
- 陣列名的解引用
在地址前加上 * 表示對這塊記憶體上內容的解引用,表示記憶體的內容
int main()
{
int a[4]
*a = 100;
*(a+1) = 200;
*(a+2) = 300;
}
- 用指標變數
一維陣列
a表示第一個成員的首地址
a也表示其定義的整個記憶體空間的地址
int main()
{
/* int a1 = 100;
int a2 = 200;
...
int a100 = 1000;
*/
int a[4] = {100,200,0,400,500};
//int規定了這個記憶體空間當中4個資料的型別;一個32位=4byte
//申請4個32位記憶體空間,並把這塊空間標記為a;
printf("a_addr: %p\n", a);
printf("a[0]_addr: %p\n", &a[0]);
//a[1]僅表示32位記憶體空間中包含的一個變數
//這一整塊記憶體的首地址為 &a[0],a表示第一個成員的首地址
printf("a_addr: %p\n", a+1);
printf("a[1]_addr: %p\n", &a[1]);
printf("&a=%\n", &a);
printf("&a+1%p\n", &a+1);
printf("a[3]_addr: %p\n", &a[3]);
//a也表示其定義的整個記憶體空間的地址
//偏移後移出該空間,距離為陣列型別大小(int為4個byte),可比較 &a[3] 與 &a+1
const int buffer[3] = {0};
//陣列也可用關鍵字修飾,此時buffer只讀
float f[3] = {1.2,2.3,3.4};
char ch[4] = {'h', 'e', '\n'};
return 0;
}
char型陣列
#include <stdio.h>
#include <string.h>
int main()
{
char buffer[10] = {'h','e','l','l','o','\0'};
//表示到棧裡申請10個連續的八位記憶體空間,並把後面這些常量初始化到對應的記憶體空間當中
// \0 為結束符,表示空(null character)
printf("buffer_size: %ld\n",sizeof(buffer));
printf("buffer_length: %u\n",(unsigned int)strlen(buffer));
char buffer2[] = "hello,kitty";
printf("buffer2_size: %ld\n", sizeof(buffer2));
char name[10] = "hello,kitty";
//初始化的內容超出記憶體空間,就寫不進去了
printf("name: %s\n",name);
printf("%c\n", name[10]);
// name[11]='x';
printf("%d\n", name[13]);
int i;
for(i = 0 ; i <= 15 ; i++)
{
printf("%p\n", *(name + i));
}
char abb = 'c';
printf("%p\n", abb);
char name1[3]="kk";
int x = 88;
printf("%p\n", &name[3];
printf("%p\n", &name1+1);
printf("x=%p\n", &x);
//觀察結果,&x 與 &name1+1 隔7個byte(按照32位記憶體對齊)
//當x也為char型時,記憶體隔3個byte(32位記憶體對齊)
return 0;
}
二維陣列
二維陣列的實際實體記憶體仍是一維的,為了便於理解具象為二維平面
#include <stdio.h>
int main()
{
int i,j;
int data[3][3] = {{1,2,3},{1,2,3},{1,2,3}};
printf("data_addr: %p\n\n", &data);
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
printf("data[%d][%d] = %d\n", i, j, data[i][i]);
printf("ptr_data = %p\n", &(data[i][j]));
}
}
return 0;
}
指標偏移量與記憶體地址的關係
#include <stdio.h>
int main()
{
int i,j;
char name[4][3] = {"akk","955","98k"};
printf("name_addr = %p\n", name) ;
printf("&name[0][0] = %p\n\n", &name[0][0]);//二維陣列首地址
for(i = 0; i < 4; i++)
{
for(j = 0; j < 3; j++)
{
printf("name[%d][%d] = %c\n", i, j, name[i][j]);
// 按順序列印12個地址上的內容
printf("name[%d][%d]_addr = %p\n\n", i, j, *(*(name + i) + j));
//按順序列印12個地址
}
}
printf("------------------------------------\n\n");
char (*p)[3]= name;
printf("p_addr: %p\n\n", p);
for(i = 0; i < 3; i++)
{
printf("p + %d = %s\n", i, p + i); //指標偏移
printf("& p + %d = %p\n", i, &p+i);
printf("(*p)[%d] = %c\n", i, (*p)[i]);
printf("(*P)[%d]_addr: %p\n\n", i, &(*p)[i]);
}
return 0;
}
結果如下
結構體陣列
它與前面講的數值型陣列幾乎是一模一樣的,只不過需要注意的是,結構體陣列的每一個元素都是一個結構體型別的變數,都包含結構體中所有的成員項。
定義結構體陣列的方法很簡單,同定義結構體變數是一樣的,只不過將變數改成陣列。或者說同前面介紹的普通陣列的定義是一模一樣的
typedef struct STUDENT
{
char name[10];
int age;
char sex;
struct score
{
float che;
float mat;
float eng;
}s;
}student;
int main()
{
int i;
student stu[10] = {{"kitty",18,'m',88.88},{"kfc",24,'f'},};
//這就定義了一個結構體陣列,共有 10 個元素,每個元素都是一個結構體變數,都包含所有的結構體成員。
for(i = 0; i < N; i++)
{
printf("name: %s, age: %d, sex: %c, che: %f, mat: %f, eng: %f\n",stu[i].name, stu[i].age, stu[i].sex, stu[i].s.che, stu[i].s.mat, stu[i].s.eng);
}
return 0;
}
相關文章
- c語言字元陣列C語言字元陣列
- c語言的陣列C語言陣列
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、陣列C語言陣列
- c語言-運算子,陣列,指標C語言陣列指標
- C語言陣列求學生成績C語言陣列
- C語言動態陣列小作業C語言陣列
- go 語言陣列Go陣列
- C語言如何計算陣列的長度C語言陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- C語言陣列實現三子棋C語言陣列
- C語言 二維陣列課題程式碼C語言陣列
- c語言關於陣列的簡單運算C語言陣列
- c語言獲取陣列長度的函式C語言陣列函式
- C語言多維陣列本質技術推演C語言陣列
- (C語言)使用指標列印陣列的內容C語言指標陣列
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- 最大連續子陣列和求解問題(C語言)陣列C語言
- 39.C語言陣列學習的有關整理C語言陣列
- 實驗4 c語言陣列應用程式設計C語言陣列程式設計
- c語言程式設計學習之二維陣列C語言程式設計陣列
- 基於陣列的學生管理系統【C語言版】陣列C語言
- C語言陣列應用例項2: 掃雷遊戲C語言陣列遊戲
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 實驗4_C語言陣列應用程式設計C語言陣列程式設計
- C語言陣列知識體系整理大學霸IT達人C語言陣列
- C語言函式題-查詢陣列每行的最大值C語言函式陣列
- c語言中三維陣列C語言陣列
- go語言學習-陣列-切片-mapGo陣列
- 七種常見的陣列排序演算法整理(C語言版本)陣列排序演算法C語言
- c語言的strlen函式計算字元陣列長度不對C語言函式字元陣列
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- C語言使用指標對陣列指定位置進行插入元素C語言指標陣列
- 用C語言輸出蛇形矩陣C語言矩陣
- 《零基礎看得懂的C語言入門教程 》——(九)C語言二維陣列與迴圈巢狀C語言陣列巢狀
- Solidity語言學習筆記————12、陣列Solid筆記陣列
- 易語言陣列 ,索引從 1 開始。陣列索引
- Go 語言基礎 陣列、切片、對映Go陣列