c语言的学习笔记

60 阅读1分钟

​「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」。

数组名是首元素的地址,&和sizeof数组名除外

只有 sizeof(数组名)  的时候,计算的是整个数组的大小,这后面+0,就不是 “纯净的”  sizeof(数组名) 了,换句话说只有 sizeof(数组名)   这种特定的形式才是数组大小

sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,&数组名,这里的数组名表示整个数组,取出的是整个数组的地址 ,除此之外所有的数组名都表示首元素的地址

题目五:

int main()
{
	char arr[] = "abcdef";

	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));
	return 0;
}

//6 \0之前出现了6个 

//6 理由同上

//err

//err

// 6 &arr - 数组的地址 - 数组指针 char(*p)[7]=&arr

//随机值

//5 从b的位置开始数字符

{
	char arr[] = "abcdef";

	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));


	return 0;
}

//7 a b c d e f \0 7个字符 7*1=7 sizeof计算的数组的大小。单位是字节

//4/8计算的是地址的大小 arr+0是首元素的地址

//1 *arr是首元素,sizeof(*arr)计算首元素大小

//1 arr[1]是第二个元素,sizeof(arr[1])计算的是第二个元素的大小

//4 &arr虽然是数组的地址,但也是地址,所以是4/8个字节

//4/8 &arr+1是跳过整个数组后的地址,但也是地址

// 4/8 &arr[0]+1 第二个元素的地址

题目六:

int main()
{
	char* p = "abcdef";

	printf("%d\n", sizeof(p));
	printf("%d\n", sizeof(p + 1)); 
	printf("%d\n", sizeof(*p));
	printf("%d\n", sizeof(p[0]));
	printf("%d\n", sizeof(&p));
	printf("%d\n", sizeof(&p + 1));
	printf("%d\n", sizeof(&p[0] + 1));
	return 0;
}

// 4/8 - p + 1得到的是字符b的地址

//4/8 - 计算指针变量p的大小

//1 *p就是字符串的第一个字符 - 'a'

//1  int arr[10]; arr[0] == *(arr+0)   p[0] == *(p+0) == 'a'

//4/8 地址

//4/8 地址

//4/8 地址

题目七:


int main()
{
	char* p = "abcdef";

	printf("%d\n", strlen(p));
	printf("%d\n", strlen(p + 1)); 
	printf("%d\n", strlen(*p));
	printf("%d\n", strlen(p[0]));
	printf("%d\n", strlen(&p));
	printf("%d\n", strlen(&p + 1));
	printf("%d\n", strlen(&p[0] + 1));

	return 0;
}

 //6

//5

//err

//err

//随机值

// 随机值

//5

​​

  题目八:

//二维数组
int main()
{
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a[0][0]));
	printf("%d\n", sizeof(a[0]));
	printf("%d\n", sizeof(a[0]+1));
	printf("%d\n", sizeof(*(a[0] + 1));
	printf("%d\n", sizeof(a + 1));
	printf("%d\n", sizeof(*(a + 1));
	printf("%d\n", sizeof(&a[0] + 1));
	printf("%d\n", sizeof(*(&a[0] + 1));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a[3]));

	return 0;
}

遗留一道二维数组的题目,大家先自行思考,明天会公布答案。加油!