C语言基础(四)——数组

数组

概念:数组是一个集合,可以定义对应的变量,(就是可以存放很多数据,里面的数据都是要同一种类型)

整型数组:

初始化:定义+赋值

① int a[5] = {1,2,3,4100,5345};

② int a[5] = {1,3,4};//局部初始化,后面数据为0

③ int a[5] = {0};//清空数组 清空是什么意思:清空为0,空间里面是不可能没东西的。

④ int a[] = {1,2,4};(数组对应的长度,是由编译器自己计算的,大括号里面有多少个就多少个)

//整型数组示例代码:从小到大排序
int data;
for(int m=0; m<3; m++)//
{
    for(n = m+1; n<4;n++)
    {
        if(a[m] > a[n])//条件成立则进行互换
        {
        	data = a[m];
        	a[m] = a[n];
        	a[n] = data;
        }
	}
}

数组注意点:

1)数组越界,编译的时候不会报错,但是运行的时候有可能段错误。所以写过于数组的代码不要越界访问数组元素。

2)数组的下标范围是他的长度-1(动态计算数组的长度 = 数组总大小/数组数据类型的大小)

3)数组中,所有元素的地址都是连续在一起的,如果是整形数组,那么是隔4个字节连在一起的。

4) 数组的地址&array和数组首元素的地址&array[0]和数组的名字array存放的都是同一个地址值

​ array:数组的名字array可以表示的是数组首元素的地址。

​ (array除了表示数组首元素的地址之外,也可以表示整个数组)

​ &array == array == &array[0]

5) 数组内每一个元素都是同一种数据类型

字符数组:

初始化:

1)char array[10] = {‘a’,‘v’,‘s’,‘1’,‘2’,‘4’,’.’};//0就是\0

2)char array[500] = “hi”; hi后面默认为0,也就是\0.

\3) char array[] = “helloworld”;//编译器帮你计算字符串的长度

\4) char array[10] = “\0”;//定义一个空的数组

字符数组注意点:

① 结束标志符号:\0 (占一个字节,属于转义字符)

② 数组名 == &数组名 == &数组名[0]

③ 数组名可以表示数组,也可以表示数组首元素的地址

常用的字符串函数:

计算字符串:strlen:计算给定字符串的长度。
sizeof:返回一个对象或者类型所占的内存字节数。
字符串拷贝:strcpy
字符串比较:strcmp
字符串拼接:strcat

自己写常用的字符串函数:

//计算字符串:strlen
int main()
{
    int i=0,n=0;
    scanf("%d",&n);
    char a[n];
    scanf("%s",a);
    while(a[i]!='\0')
    {
        i++;
    }
    printf("%d\n",i);
    return 0;
}
//字符串拼接: strcat
int my_strcat();
int main()
{
    char a[5]="abc",b[4]="de";
    my_strcat(a,b);
    return 0;
}
int my_strcat(char *a,char *b)
{
    int i,n,k,lenA=strlen(a),lenB=strlen(b);
    // printf("%ld,%d",strlen(a),lenB);
    n=lenA+lenB;
    char c[n];
    for(i=0;i<lenA+1;i++)
    {
      c[i]=a[i];
      if(a[i]=='\0')
      {
        for(k=0;k<lenB;k++)
        {
          c[i]=b[k];
          i++;
        }
      }
    }
 	 printf("%s\n",c);
    printf("%ld\n",strlen(c));
}
//字符串比较:strcmp
int my_strcmp();
int main()
{
    char a[5]={'a','b','c','d','e'},b[5]={'a','b','c','d','e'};
    // my_strcmp(a,b);
    printf("%d",my_strcmp(a,b));
    return 0;
    
}
int my_strcmp(char *a,char *b)
{
   int n,i;
    for(n=0;n<5;n++)
    {
        if(a[n]==b[n])
        {
            i=0;
        }
        else if(a[n]<b[n])
        {
            i=1;
            break;
        }
        else
        {
            i=-1;
            break;
        }
        if(i==0)
        {
            printf("字符串相等");
            break;
        }
    }
    return i;
}
//字符串拷贝:strcpy
int main()
{
    char a[10] = "hello";
    char b[10];
    
    printf("拷贝之前b里面的数据是%s\n",b);
    
    //另一种方法
    //strcpy(b,a);
    //int len=strlen(a);
    //for(int 1=0;i<len;i++)
    //{
    //    b[i]=a[i];    
    //}
    
     while(a[i]!='\0')
     {
         b[i]=a[i];     
     }
    
    printf("拷贝之后b里面的数据是%s\n",b);
    
    return 0;
}

二维数组:

二维数组:

定义: int array[行][列];

​ int array[2][3] = {6,7,8,9,10,11};

​ int array[2][3] = {{1,2},{4,5}};

​ int array[ ][4] = {1,2,3,4};

​ 1,2,3,4

​ 0 0 0 0

数组名字:array,也可以表示数组首元素的地址&array[0]

数组名字array 等于 数组首元素地址&array[0][0] 等于数组的地址 &array 等于第一个一维数组的地址 &array[0]

二维数组和指针

int array[2][3] = {6,7,8,9,10,11};

array:是数组的名字,也可以表示第一个元素<第一个一维数组>的地址?存放了什么? &(array[0])

&array:是二维数组本身的地址。

*(&(array[0])) 等于 (array[0])

*array:是第一个一维数组也可以表示第一个一维数组中的首元素的地址 &(array[0][0])

(*array)[1]:是第一个一维数组中的第二个元素,存放了什么?7

*((*array)+1):是第一个一维数组中的第二个元素,存放了什么?7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值