C语言的数组

本文深入讲解了一维数组、二维数组及字符数组的概念、定义、访问、初始化等,并提供了冒泡排序算法实现步骤与示例代码,同时介绍了字符数组的特殊处理方法。
鉴于昨天偷懒,没有及时的将知识点写入自己的博客,今儿只能一次性地写两个。不过也好,顺带的可以复习一下。

数组

 1. 概念
    所谓的数组,即为若干个数据类型相同的元素集合。
 2. 定义
    类型 名字[元素个数];
 3. 访问
    a[0]~a[N];
 4. 初始化
    1.定义了数组,若不初始化,则元素值为随机值。
    2.若进行了部分初始化,则没有初始化的元素默认为0.
    3.初始化禁止越界。
 5.元素个数
    常量,若不写,则空间由初始化的元素个数决定。若定义的是变量,则不能初始化。
 6.性质
     1.元素类相同。
     2.开辟的空间是连续的。
     3.数组名是首地址(*),这个在指针这用到很多。
     4.数组越界访问不报错,使用时注意。

这里有个会经常用到的小公式,关于计算元素个数的,譬如
int a[N] = { 1,2,5,6,3,8} ;
则 N=sizeof (a) / sizeof( int ) ;

在数组这一章里有一个很重要的知识点:冒泡排序法
非常非常常见的面试题,必须要会(严肃脸= =。)
关键性代码如下:
N代表元素个数

for(i=0 ;i<N-1; i++)
    {
        for( k=0; k<N-1-i; k++ )
        {
            if(a[k]>a[k+1])
            {
                a[k] ^= a[k+1];
                a[k+1] ^= a[k];
                a[k] ^= a[k+1];
            }
        }
    }

排序过程:

(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束

例题: 定义一个int型数组,将数组里的数进行翻转


int a[] = { 0,1,2,3,4,5,6,7,8};

代码如下:

    int a[] = {0,1,2,3,4,5,6,7,8};
    int n = sizeof(a) / sizeof(int);  //计算元素个数
    int i,j;            //i:前   j:后
    for(i=0,j=n-1; i<j ;i++, j--)
    {
        //之前那篇文章有提到过这个方法
        //不需要借助其他变量,将两个数进行互换
        a[i] ^= a[j];
        a[j] ^= a[i];
        a[i] ^= a[j];
    }

我这里基本上就贴上关键性代码。这里多重for循环里,格式为:
for ( 表达式1,表达式2;条件;表达式3,表达式4){}

二维数组

定义:类型 名字[行][列]
二维数组和一维数组性质,初始化什么的都一样,这里就不多说了

这里也有个例题

例题:找二维数组里的最大值,及其下标
int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};

代码如下:

**int row = 0,line = 0;
int i,j;
for(i=0; i<3; i++)
{
    for(j=0; j<4; j++)
    {
        if(a[i][j] > a[row][line])
        {
            row = i;
            line = j;
        }
    }
}**

字符数组

之前的一堆性质啊,定义什么的我就不重复多说了,说点干货。
需要注意的是,char型数组的字符串可以用printf/puts的形式进行输出,而int型字符串输出只能以遍历的形式。

而对于char型数组赋值的时候,若要以一个字符串直接赋值的话,只允许出现在初始化的时候,在printf中,%s的输出是从给定的地址开始,到’\0’结束的,不信你可以使用sizeof(数组名)

在字符数组中有三个很方便的函数
strcpy:

  1. 功能:将字符串2,拷贝到字符数组1中去
  2. 返值:返回字符数组1的首地址
  3. 参数:两个字符型地址
  4. 说明:字符数组1必须足够大,拷贝时’\0’一同拷贝

strcmp:

  1. 功能:比较两个字符串
  2. 参数:两个字符串地址
  3. 返回值:相同为0 ,s1>s2 正数 s1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值