c語言關於陣列的簡單運算
我們可以通過陣列名+整數的運算,獲取到陣列每一個元素的地址
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
printf("%p\n", arr + i);
}
陣列名+i<==>第i個元素的地址
*(陣列名+i)<==> 第i個元素
1.
int a[] = { 1, 2, 3, 4 };
//sizeof單位是位元組
printf("%d\n", sizeof(a)); //16 ,sizeof(陣列名)表示整個陣列
printf("%d\n", sizeof(a+0));//4,首元素的地址+0,還是首元素的地址
printf("%d\n", sizeof(*a));//4,首元素‘1’,int型別
printf("%d\n", sizeof(a+1));//4,第二個元素的地址
printf("%d\n", sizeof(a[1]));//4,第二個元素
printf("%d\n", sizeof(&a));//4,首元素的地址
printf("%d\n", sizeof(&a+1));//4,跳過整個陣列的下一個地址
printf("%d\n", sizeof(&a[0]));//4,第一個元素的地址
printf("%d\n", sizeof(&a[0]+1));//4,第二個元素的地址
printf("%d\n", sizeof(*&a));//16,&a是整個陣列的地址,解引用訪問整個陣列
注:
arr+1:第二個元素的地址
&arr+1:跳過整個陣列的下一個地址
2.
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));//6
printf("%d\n", sizeof(arr+0));//4
printf("%d\n", sizeof(*arr));//1
printf("%d\n", sizeof(arr[1]));//1
printf("%d\n", sizeof(&arr));//4
printf("%d\n", sizeof(&arr+1));//4
printf("%d\n", sizeof(&arr[0]+1));//4
printf("%d\n", sizeof(*&arr));//6
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
//strlen()函式遇到‘/0’結束
printf("%d\n", strlen(arr));//隨機值
printf("%d\n", strlen(arr+0));//隨機值
//printf("%d\n", strlen(*arr));//訪問記憶體出錯,*arr是‘a’
//printf("%d\n", strlen(arr[1]));//訪問記憶體出錯,arr[1]是‘b’
printf("%d\n", strlen(&arr));//隨機值
printf("%d\n", strlen(&arr+1));//隨機值
printf("%d\n", strlen(&arr[0]+1));//從b向後數,隨機值
3.
char *p = "abcdef";
printf("%d\n", sizeof(p));//指標,4
printf("%d\n", sizeof(p+1));//4
printf("%d\n", sizeof(*p));//1,a
printf("%d\n", sizeof(p[0]));//1,a
printf("%d\n", sizeof(&p));//4
printf("%d\n", sizeof(&p+1));//4
printf("%d\n", sizeof(&p[0]));//4
char *p="abcdef";
p中存放的‘a’的地址
1)先將“abcdef”放在記憶體裡
2)在向記憶體申請四位元組(p),用來存放地址
3)把a字元的地址放在的p中,每次用時從後向後找
所以sizeof(*p),是1,因為p裡面只有a 的地址
char *p = "abcdef";
printf("%d\n", strlen(p));//6
printf("%d\n", strlen(p+1));//5
//printf("%d\n", strlen(*p));//錯誤,*p=‘a’
//printf("%d\n", strlen(p[0]));//錯誤,p[0] = 'a'
//printf("%d\n", strlen(&p));//隨機值
//printf("%d\n", strlen(&p+1));//隨機值
printf("%d\n", strlen(&p[0]));//6
printf("%d\n", strlen(&p[0])+1);//隨機值
4.
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));//7,整個陣列
printf("%d\n", sizeof(arr + 0));//4,首元素地址+0,還是首元素地址
printf("%d\n", sizeof(*arr));//1,首元素地址解引用,a
printf("%d\n", sizeof(arr[1]));//1,首元素,a
printf("%d\n", sizeof(&arr));//4,地址
printf("%d\n", sizeof(*&arr));//7,整個陣列
printf("%d\n", sizeof(&arr + 1));//4,地址
printf("%d\n", sizeof(&arr[0] + 1));//4,地址值
char arr[] = "abcdef";
printf("%d\n", strlen(arr));//6
printf("%d\n", strlen(arr+0));//6
//printf("%d\n", strlen(*arr));//錯誤'a'
//printf("%d\n", strlen(arr[1]));//錯誤'b'
printf("%d\n", strlen(&arr));//6
printf("%d\n", strlen(*&arr));//6
printf("%d\n", strlen(&arr+1));//隨機值
printf("%d\n", strlen(&arr[0]+1));//5
二維陣列:
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//48
printf("%d\n", sizeof(a[0][0]));//4
printf("%d\n", sizeof(a[0]));//16
printf("%d\n", sizeof(a[0]+1));//4
printf("%d\n", sizeof(a+1));//4
printf("%d\n", sizeof(&a[0]+1));//4
printf("%d\n", sizeof(*a));//16
printf("%d\n", sizeof(a[3]));//16
a[0]單獨放在sizeof內部,表示第一行的地址,(a[0]+1)放在sizeof內部,a[0]發生降級,表示第一行第一個元素的地址,a[0]+1為第一行第二個元素的地址
相關文章
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- 關於C語言的簡單介紹C語言
- c語言-運算子,陣列,指標C語言陣列指標
- (C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧C語言陣列C++
- c語言的陣列C語言陣列
- C語言如何計算陣列的長度C語言陣列
- 關於C語言的位運算子C語言
- C語言陣列C語言陣列
- C語言(字元陣列)C語言字元陣列
- c語言字元陣列C語言字元陣列
- C語言位運算C語言
- [ASM C/C++] C語言陣列ASMC++C語言陣列
- 39.C語言陣列學習的有關整理C語言陣列
- C語言練手專案--C 語言製作簡單計算器C語言
- 力扣561. 陣列拆分 I-C語言實現-簡單題力扣陣列C語言
- 【陣列】1394. 找出陣列中的幸運數(簡單)陣列
- 基於陣列的學生管理系統【C語言版】陣列C語言
- C語言 指標與陣列C語言指標陣列
- c語言陣列、sizeof()及strlen()C語言陣列
- C語言基礎-1、陣列C語言陣列
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- 關於C語言的常量C語言
- C語言求其字元陣列的長度C語言字元陣列
- 取冪運算--C語言描述C語言
- 陣列的位移運算陣列
- c語言的strlen函式計算字元陣列長度不對C語言函式字元陣列
- C語言陣列求學生成績C語言陣列
- 關於c語言單項鍊表尾新增C語言
- C語言應用於LR中-如何得到陣列長度C語言陣列
- c語言中計算陣列長度的方法C語言陣列
- C語言-GCC的簡單介紹C語言GC
- C語言動態陣列小作業C語言陣列
- C語言指標和陣列基礎C語言指標陣列
- C語言:陣列和指標的區別C語言陣列指標
- 關於大數(C語言)C語言
- go 語言陣列Go陣列
- (C語言)使用指標列印陣列的內容C語言指標陣列
- c語言獲取陣列長度的函式C語言陣列函式