#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
//二維數組
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)); //
printf("%d\n", sizeof(*(a[0] + 1))); //
//printf("%d\n", sizeof(a + 1)); // 4
printf("%d\n", sizeof(*(a + 1))); //
//printf("%d\n", sizeof(&a[0] + 1)); // 4
printf("%d\n", sizeof(*(&a[0] + 1))); //
printf("%d\n", sizeof(*a)); //
printf("%d\n", sizeof(a[3])); //
char* p = "abcdef";
//printf("%d\n", sizeof(p)); // 4 p爲指針
//printf("%d\n", sizeof(p + 1)); // 4 指針
//printf("%d\n", sizeof(*p)); // 1 第0個元素
//printf("%d\n", sizeof(p[0])); // 1 第0個元素
//printf("%d\n", sizeof(&p)); // 4 指針
//printf("%d\n", sizeof(&p + 1)); // 4 指針
//printf("%d\n", sizeof(&p[0] + 1)); // 4 指針
//printf("%d\n", strlen(p)); // 6
//printf("%d\n", strlen(p + 1)); // 5
printf("%d\n", strlen(*p)); //
printf("%d\n", strlen(&p)); //
printf("%d\n", strlen(&p + 1)); //
printf("%d\n", strlen(p[0]));
//printf("%d\n", strlen(&p[0] + 1)); // 5
//字符串
char arr[] = "abcdef";
//printf("%d\n", sizeof(arr)); // 7 包括\0
//printf("%d\n", sizeof(arr + 0)); // 4 指針
//printf("%d\n", sizeof(*arr)); // 1 首元素一個char
//printf("%d\n", sizeof(arr[1])); // 1 第二個元素,一個char
//printf("%c\n", arr[1]);
//printf("%d\n", sizeof(&arr)); // 4 數組指針
//printf("%d\n", sizeof(&arr + 1)); // 4 數組指針 + 1
//printf("%d\n", sizeof(&arr[0] + 1)); // 4 指向第二個字符的指針
//printf("%d\n", strlen(arr)); // 6
//printf("%d\n", strlen(arr + 0)); // 6
printf("%d\n", strlen(*arr)); // 未定義行爲
printf("%d\n", strlen(arr[1])); // 未定義行爲
printf("%d\n", strlen(&arr)); // 未定義行爲
printf("%d\n", strlen(&arr + 1)); // 未定義行爲
//printf("%d\n", strlen(&arr[0] + 1)); // 5
//字符數組
//char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f'};
//printf("%d\n", sizeof(arr)); // 6 整個數組包含6個char
//printf("%d\n", sizeof(arr + 0)); // 4 指針
//printf("%d\n", sizeof(*arr)); // 1 首元素爲一個char
//printf("%d\n", sizeof(arr[1])); // 1 首元素表示一個char
//printf("%d\n", sizeof(&arr)); // 4 數組指針
//printf("%d\n", sizeof(&arr + 1)); // 4 數組指針+1
//printf("%d\n", sizeof(&arr[0] + 1)); // 4 指向第二個元素的指針
//不能對字符數組求strlen
//printf("%d\n", strlen(arr)); // 未定義行爲
//printf("%d\n", strlen(arr + 0)); // 未定義行爲
//printf("%d\n", strlen(*arr)); // 未定義行爲
//printf("%d\n", strlen(arr[1])); // 未定義行爲
//printf("%d\n", strlen(&arr)); // 未定義行爲
//printf("%d\n", strlen(&arr+1)); // 未定義行爲
//printf("%d\n", strlen(arr[0]+1)); // 未定義行爲
////一維數組,
//int a[] = { 1, 2, 3, 4 };
//printf("%d\n", sizeof(a)); // 16 sizeof(a)表示求整個數組的長度,一共四個元素,每個元素爲一個int,
////printf("%p\n", a);
////printf("%p\n", a + 1);
//printf("%d\n", sizeof(a + 0)); // 4 (a + 0)表示a隱式轉換爲指針,
//printf("%d\n", sizeof(*a)); // 4 *a表示首元素指針的解引用,
////printf("%d\n", *a);
//printf("%d\n", sizeof(a + 1)); // 4 a + 1表示指針,指向第二個元素,
////printf("%d\n", *(a + 1));
//printf("%d\n", sizeof(a[1])); // 4 a[1]表示一個int,
////printf("%d\n", a[1]);
//printf("%d\n", sizeof(&a)); // 4 &a表示數組指針,指向整個數組,
////printf("%d\n", *&a);
//printf("%d\n", sizeof(*&a)); // 16 (*&a)表示解引用數組指針,表示四個int,
//printf("%d\n", sizeof(&a + 1)); // 4 數組指針+1,
//printf("%d\n", sizeof(&a[0])); // 4 指向首元素的指針,
//printf("%d\n", sizeof(&a[0] + 1)); // 4 指向第二個元素的指針,
system("pause");
return 0;
}