數組和指針的理解


#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章