在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

关于一维数组,字符数组,二维数组,字符串的计算

发布时间:2018-5-19 浏览:3201

首先必须明白数组名代表整个数组只有两种情况:
1,sizeof(数组名),数组名代表整个数组。意思是取整个数组大小,单位是字节。
2,&数组名,取出的是整个数组地址。
3,除此之外,所有遇到数组都代表首元素地址。
下面看题:
一维数组,
int main()
 {
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));//16整个数组的大小,单位是字节
printf("%d\n",sizeof(a+0));//4首元素地址
printf("%d\n",sizeof(*a)); //4首元素
  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));//16整个数组的大小,单位是字节
printf("%d\n",sizeof(&a+1));//4取出数组后面下一个数组的地址,跳过16字节
printf("%d\n",sizeof(&a[0]));//4首元素地址
printf("%d\n",sizeof(&a[0]+1));//4第二个元素地址
 
字符数组
  char arr[] = {'a','b','c','d','e','f'};
  
  printf("%d\n", strlen(arr));//随机值 无\0无法停下
  printf("%d\n", strlen(arr+0));//随机值 无\0无法停下
  //printf("%d\n", strlen(*arr));//err 访问传递a的ANSI值97地址值出现冲突
  //printf("%d\n", strlen(arr[1]));//err   传递b的ANSI值98地址值出现冲突
  printf("%d\n", strlen(&arr));//随机值 从a往后数无\0无法停下
  printf("%d\n", strlen(&arr+1));//随机值-6 从f往后数无\0无法停下
  printf("%d\n", strlen(&arr[0]+1));//随机值-1 从b往后数无\0无法停下
 
  printf("%d\n", sizeof(arr));  //6 数组元素的大小
  printf("%d\n", sizeof(arr+0));//4 首元素地址
  printf("%d\n", sizeof(*arr)); //1 首元素的大小(char)
  printf("%d\n", sizeof(arr[1]));//1 第二个元素的大小
  printf("%d\n", sizeof(&arr));//4 整个数组的地址
  printf("%d\n", sizeof(&arr+1));//4取出下一个数组的地址 f的后面
  printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素地址
字符串
char arr[] = "abcdef";
  printf("%d\n", strlen(arr));//6 从a往后数
  printf("%d\n", strlen(arr+0));//6 从a往后数
  //printf("%d\n", strlen(*arr));// err
  //printf("%d\n", strlen(arr[1]));// err
  printf("%d\n", strlen(&arr));//6 从a往后数
  printf("%d\n", strlen(&arr+1));//随机值 取出下一个数组的地址跳过6
  printf("%d\n", strlen(&arr[0]+1));//5 从b开始
  printf("%d\n", sizeof(arr));//7 数组大小包括\0
  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 取出下一个数组的地址跳过7
  printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素地址
char *p = "abcdef";
  
  printf("%d\n", strlen(p));//6 从a开始
  printf("%d\n", strlen(p+1));//5 从b开始
  printf("%d\n", strlen(*p));//err
  printf("%d\n", strlen(p[0]));//err
  printf("%d\n", strlen(&p));//随机值 从p的地址往后数
  printf("%d\n", strlen(&p+1));//随机值 从p的地址下一个往后数
  printf("%d\n", strlen(&p[0]+1));//5 从B开始
 
  printf("%d\n", sizeof(p));//4(指针变量)a的地址
  printf("%d\n", sizeof(p+1));//4  b的地址
  printf("%d\n", sizeof(*p));//1 解引用a的地址  a的大小(char) 首元素
  printf("%d\n", sizeof(p[0]));//1首元素 
  printf("%d\n", sizeof(&p));//4  p的地址 
  printf("%d\n", sizeof(&p+1));//4  跳过了p
  printf("%d\n", sizeof(&p[0]+1));//4  b的地址
 二维数组
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仅仅计算第四行大小
return 0;
}
 
 
 
 
 
 

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助