首先,先看这样一段程序:
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,0};
printf("%p\n", arr);
printf("%d\n", *arr);
return 0;
}
运行的结果:
这里,printf(“%p\n”, arr),指的是打印数组arr的首元素arr[0]的地址,为00D5F14;printf(“%d\n”, *arr),指的是打印指向数组arr的首元素arr[0]的内容。
通过以上,下面说一下有关数组的一些运算:
//整型一维数组
#include<stdio.h>
int main()
{
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));
//16 sizeof(数组名)指的是一个int整型所占内存大小。
printf("%d\n",sizeof(a+0));
//4 sizeof(数组名+偏移量)指数组的首元素a[0]偏移0位后的内存大小
printf("%d\n",sizeof(*a));
//4 sizeof(指针+数组名)指数组首元素的地址的大小
printf("%d\n",sizeof(a+1));
//4 sizeof(指针+数组名+偏移量)指数组a[1]的地址的大小
printf("%d\n",sizeof(a[1]));
//4 sizeof(数组[])指数组中某一元素所占内存大小
printf("%d\n",sizeof(&a));
//4 sizeof(&数组名)指数组首元素a[0]地址的大小,仅仅int型地址
printf("%d\n",sizeof(&a+1));
//4 sizeof(&数组名+偏移量)指数组最后元素加偏移量,即数组之外的地址的大小,
printf("%d\n",sizeof(&a[0]));
//4 sizeof(&数组[])指数组某个元素的地址的大小
printf("%d\n",sizeof(&a[0]+1));
//4 sizeof(&数组[]+偏移量)指数组某个元素的地址加偏移量的大小
return 0;
}
//#include<stdio.h>
//int main()
//{
// int arr[] = {1,2,3,4,5,6,7,8,9,0};
// printf("%p\n", arr);
// printf("%d\n", *arr);//这里输出什么?
// return 0;
//}
////整型一维数组
//#include<stdio.h>
//int main()
//{
// int a[] = {1,2,3,4};
// printf("%d\n",sizeof(a)); //16 sizeof(数组名)指的是一个int整型所占内存大小。
// printf("%d\n",sizeof(a+0)); //4 sizeof(数组名+偏移量)指数组的首元素a[0]偏移0位后的内存大小
// printf("%d\n",sizeof(*a)); //4 sizeof(指针+数组名)指数组首元素的大小
// printf("%d\n",sizeof(a+1)); //4 sizeof(指针+数组名+偏移量)指数组a[1]的地址的大小
// printf("%d\n",sizeof(a[1])); //4 sizeof(数组[])指数组中某一元素所占内存大小
// printf("%d\n",sizeof(&a)); //4 sizeof(&数组名)指数组首元素a[0]地址的大小,仅仅int型地址
// printf("%d\n",sizeof(&a+1)); //4 sizeof(&数组名+偏移量)指数组最后元素加偏移量,即数组之外的地址的大小,
// printf("%d\n",sizeof(&a[0])); //4 sizeof(&数组[])指数组某个元素的地址的大小
// printf("%d\n",sizeof(&a[0]+1));//4 sizeof(&数组[]+偏移量)指数组某个元素的地址加偏移量的大小
// return 0;
//}
//char字符数组
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr)); //6 char型数组的大小6个元素
printf("%d\n", sizeof(arr+0)); //4 指数组的首元素a[0]偏移0位后的内存大小
printf("%d\n", sizeof(*arr)); //1 指向一个char型首元素arr[0]大小
printf("%d\n", sizeof(arr[1])); //1 数组arr[1]所占内存的大小
printf("%d\n", sizeof(&arr)); //4 数组arr地址的大小
printf("%d\n", sizeof(&arr+1)); //4 数组arr之外的地址的大小
printf("%d\n", sizeof(&arr[0]+1));//4 数组首元素arr[0]的地址加1的大小
printf("%d\n", strlen(arr)); //x 在strlen语句,要在数组找到\0才停下来,随机值
printf("%d\n", strlen(arr+0)); //x 在strlen语句,要在数组找到\0才停下来,随机值
printf("%d\n", strlen(*arr)); //error arr[0]='a',ASCII码97,strlen(97)
printf("%d\n", strlen(arr[1])); //error arr[1]='b',ASCII码98,strlen(98)
printf("%d\n", strlen(&arr)); //x arr[0],要在数组找到\0才停下来,随机值
printf("%d\n", strlen(&arr+1)); //x 数组外,要在数组找到\0才停下来,随机值
printf("%d\n", strlen(&arr[0]+1)); //x arr[0]地址加1 ,要在数组找到\0才停下来,随机值
return 0;
}