1.数组长度

#include <stdio.h>
#include <string.h>

int main()
{
  char arr4[] = "abcdef";
  printf("%d\n",sizeof(arr4));
  //sizeof计算arr4所占空间大小
  //7个元素——char 7*1 = 7
 
  printf("%d\n",strlen(arr4));
  //strlen求字符串长度求得是‘\0’之前的字符个数
  //[a b c d e f \0]
  //6个字符

    return 0;
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

结果

7

6

#include <stdio.h>
#include <string.h>

int main()
{
  char arr1[] = "abc";
  char arr2[] = {'a','b','c'};
  printf("%d\n",sizeof(arr1));
  //计算变量,数组,类型大小单位是字节-操作符包括\0
  printf("%d\n",sizeof(arr2));
  printf("%d\n",strlen(arr1));
  //求字符串长度,只针对字符串求长度不包括字符串标志符\0,使用得引头文件
  printf("%d\n",strlen(arr2));
  //arr2没有具体\0的位置输出随机值,strlen在\0之前停,检测不到\o输出随机值


    return 0;
  }
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

2.输出二位数组

#include <stdio.h>
int main()
{
   int arr[3][4] = {{1,2,3},{4,5}};
   int i = 0;
   for(i=0;i<3;i++)
   {
      int j = 0;
      for(j = 0;j<4;j++)
    {
      printf("%d ",arr[i][j]);
    }
    printf("\n");
   }
 
    return 0;
  }
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

3.输出地址

#include <stdio.h>
int main()
{
   int arr[3][4] = {{1,2,3},{4,5}};
   int i = 0;
   for(i=0;i<3;i++)
   {
      int j = 0;
      for(j = 0;j<4;j++)
    {
      printf("&arr[%d][%d] = %p\n ",i,j,&arr[i][j]);
    }
 
   }
 
    return 0;
  }
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

4.冒泡排序

#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
  //确定冒泡排序的趟数
  int i =0;
  for(i = 0;i<sz -1;i++)
  {
    //每一趟冒泡排序
    int j = 0;
    for(j = 0;j<sz-1-i;j++)
    {
      if (arr[j]>arr[j+1])
      {
        int tmp =arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=tmp;
      }
    }
  }
}
int main()
{
   int arr[] ={9,8,7,6,5,4,3,2,1,0};
   int i =0;
   int sz = sizeof(arr)/sizeof(arr[0]);
   //对arr进行排序,排成升序
   //arr是数组,我们对arr数组进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
   bubble_sort(arr,sz);
   for(i=0;i<sz;i++)
   {
    printf("%d",arr[i]);
   }
    return 0;
}
 
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

结果

0123456789

假如一开始给的数据相对有序,为了简化内容可以优化程序

#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
  int flag = 1;//假设这一趟y要排序的数据已经有序
  //确定冒泡排序的趟数
  int i =0;
  for(i = 0;i<sz -1;i++)
  {
    //每一趟冒泡排序
    int j = 0;
    for(j = 0;j<sz-1-i;j++)
    {
      if (arr[j]>arr[j+1])
      {
        int tmp =arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=tmp;
        flag = 0;//本趟排序的数据不完全有序
      }
    }
    if (flag == 1)
    {
      break;
    }
  }
}
int main()
{
   int arr[] ={9,8,7,6,5,4,3,2,1,0};
   int i =0;
   int sz = sizeof(arr)/sizeof(arr[0]);
   //对arr进行排序,排成升序
   //arr是数组,我们对arr数组进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
   bubble_sort(arr,sz);
   for(i=0;i<sz;i++)
   {
    printf("%d",arr[i]);
   }
    return 0;
}
 
  
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

数组名是数组首元素的地址

#include <stdio.h>


int main()
{  
  int arr [] ={1,2,3,4,5,6,7};
  printf("%p\n",arr);
  printf("%p\n",&arr[0]);
  printf("%d\n",*arr);//1
    return 0;
}
//printf("%p\n",&arr);//取出的是数组的地址
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

两个例外

1.sizeof(数组名)-数组名表示整个数组 sizeof(数组名)计算的是整个数组的大小,单位是字节

2.&数组名,数组名代表整个数组,&数组名,取出的是整个数组的地址