数组相关的运算(sizeof,strlen)

    xiaoxiao2021-03-25  62

    sizeof  strlen sizeof():简单的说其作用就是返回一个对象或者类型所占的内存字节数。 strlen():用来计算指定的字符串s 的长度,不包括结束字符"\0"。 这里分别从一维数组,字符数组,二维数组中sizeof与strlen的运用实例来进行分析。 1)一维数组 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 跳过整个数组,指向数组后面的一个地址  printf("%d\n",sizeof(&a[0]));  //4 首元素地址  printf("%d\n",sizeof(&a[0]+1));//4 第二个元素的地址  return 0; } 2)字符数组 int main() {  char arr[] = {'a','b','c','d','e','f'};  printf("%d\n", sizeof(arr));   //6 整个数组大小  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 跳到数组后的地址  printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素的地址  printf("%d\n", strlen(arr));   //随机值 从首元素地址开始,向后找'\0'  printf("%d\n", strlen(arr+0)); //随机值  //printf("%d\n", strlen(*arr));   //error 把字符a传入  //printf("%d\n", strlen(arr[1])); //error  printf("%d\n", strlen(&arr));     //随机值  printf("%d\n", strlen(&arr+1));   //随机值 跳到整个数组后面  printf("%d\n", strlen(&arr[0]+1));//随机值  return 0; } int main() { char *p = "abcdef"; printf("%d\n", sizeof(p)); //4 a的地址 printf("%d\n", sizeof(p+1)); //4 b的地址 printf("%d\n", sizeof(*p)); //1 解引用为指向一个字符的大小 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的地址 printf("%d\n", strlen(p)); //6 从a开始找 printf("%d\n", strlen(p+1)); //5 从b开始找 //printf("%d\n", strlen(*p)); //error 把字符a传入 //printf("%d\n", strlen(p[0])); //error printf("%d\n", strlen(&p)); //随机值 printf("%d\n", strlen(&p+1)); //随机值 printf("%d\n", strlen(&p[0]+1));//5 从b开始找 return 0; } int main() { char arr[] = "abcdef"; printf("%d\n", sizeof(arr)); //7 整个数组大小 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 跳过数组后的地址 printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素的地址 printf("%d\n", strlen(arr)); //6 从a开始找 printf("%d\n", strlen(arr+0)); //6 //printf("%d\n", strlen(*arr)); //error 传入a字符 //printf("%d\n", strlen(arr[1]));//error printf("%d\n", strlen(&arr)); //6 从a开始找 printf("%d\n", strlen(&arr+1)); //随机值 跳过数组开始找 printf("%d\n", strlen(&arr[0]+1));//5 从b开始找 return 0; } 3)二维数组 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)); //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)); //48 整个数组 printf("%d\n",sizeof(a[3])); //16 第四行 return 0; } 注:数组名代表整个数组的时候只有两种情况,        sizeof(数组名),这里的数组名表示整个数组。        &数组名,这里的数组名表示整个数组。
    转载请注明原文地址: https://ju.6miu.com/read-34012.html

    最新回复(0)