当前位置:首页 > 操作系统 > Windows

不可或缺 Windows Native (5) - C 语言: 数组

[源码下载]

不可或缺 Windows Native (5) - C 语言: 数组


作者:webabcd

介绍
不可或缺 Windows Native 之 C 语言

  • 数组


示例
cArray.h

            <span>#ifndef _MYHEAD_ARRAY_
</span>
            <span>#define</span> _MYHEAD_ARRAY_ <span>

#ifdef __cplusplus  
</span><span>extern</span><span>"</span><span>C</span><span>"</span><span>#endif</span><span>char</span> *<span>demo_cArray();

</span><span>#endif</span>

cArray.c

            <span>/*</span>
            <span>
 * 数组
 *
 *
 * 定义数组,int ary[10],相关说明如下:
 * 1、int 是数据元素的数据类型,10 是数组元素个数,系统会根据数组元素的数据类型和元素个数来分配内存空间
 * 2、整个数组是以首地址开头的一块连续的内存单元
 * 3、数组名 ary 就代表了该数组的首地址,也就是说 ary 相当于 &ary[0]
 </span>
            <span>*/</span>
            <span>

#include </span>
            <span>"</span>
            <span>pch.h</span>
            <span>"</span>
            <span>
#include </span>
            <span>"</span>
            <span>cArray.h</span>
            <span>"</span>
            <span>
#include </span>
            <span>"</span>
            <span>cHelper.h</span>
            <span>"</span>
            <span>char</span> *<span>demo_cArray()
{
    </span><span>//</span><span> 定义并初始化一个数组
    </span><span>//</span><span> int ary[] = { 0, 1, 2, 3, 4 };

    </span><span>//</span><span> 定义一个长度为 10 的数组,并初始化前 5 个元素,其他元素默认为 0
    </span><span>//</span><span> 注:定义数组的长度时必须用常量,不能用变量(注:ANSI C99 是允许用变量定义局部数组大小的)</span><span>int</span> ary[<span>10</span>] = { <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span><span> };
    </span><span>//</span><span> 修改数组中某一个元素的值(注:只能对数组的元素赋值,而不能用赋值语句对整个数组赋值)</span>
    ary[<span>8</span>] = <span>0</span><span>;

    </span><span>//</span><span> sizeof(ary) - 数组 ary 占用的内存空间
    </span><span>//</span><span> 由于 ary 是一个整型数组,而每个整型数据占用 sizeof(int) 个字节的空间,则数组元素的个数为 sizeof(ary) / sizeof(int)</span><span>int</span> count = <span>sizeof</span>(ary) / <span>sizeof</span>(<span>int</span><span>);
    </span><span>for</span> (<span>int</span> i = <span>0</span>; i < count; i++<span>)
    {
        </span><span>int</span> x =<span> ary[i];
    }



    </span><span>//</span><span> 指定行数(一维长度)和列数(二维长度)定义一个二维数组,并初始化</span><span>int</span> ary2[<span>3</span>][<span>2</span>] = { { <span>1</span>, <span>2</span> }, { <span>3</span>, <span>4</span> }, { <span>5</span>, <span>6</span><span> } };
    </span><span>//</span><span> 修改二维数组中某一个元素的值</span>
    ary2[<span>0</span>][<span>1</span>] = <span>2</span><span>;

    </span><span>//</span><span> 初始化二维数组时,也可以一行一行地按顺序写入数据,如下。其结果同上
    </span><span>//</span><span> int ary2[3][2] = { 1, 2, 3, 4, 5, 6 };

    </span><span>//</span><span> 定义二维数组时,可以省略行数(一维长度),如下。其结果同上
    </span><span>//</span><span> int ary2[][2] = { 1, 2, 3, 4, 5, 6 };

    </span><span>//</span><span> 遍历二维数组</span><span>for</span> (<span>int</span> i = <span>0</span>; i < <span>3</span>; i++<span>)
    {
        </span><span>for</span> (<span>int</span> j = <span>0</span>; j < <span>2</span>; j++<span>)
        {
            </span><span>int</span> x =<span> ary2[i][j];
        }
    }



    </span><span>//</span><span> 定义一个字符数组,并初始化
    </span><span>//</span><span> char aryStr[] = { ‘i‘, ‘ ‘, ‘a‘, ‘m‘, ‘ ‘, ‘w‘, ‘e‘, ‘b‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘ }; </span><span>//</span><span> 长度12,占用空间12

    </span><span>//</span><span> 定义一个字符数组,并按字符串的形式对其初始化
    </span><span>//</span><span> char aryStr[] = { "i am webabcd" }; 同 char aryStr[] = "i am webabcd"; </span><span>//</span><span> 长度12,占用空间13

    </span><span>//</span><span> 以字符串的形式赋值给字符数组时,会自动在结尾处多加一个字符串结束符,即‘‘,用于标记字符串结束(字符串的结束标识为:‘‘,即 ASCII 码中的 0,也就是 NULL)</span><span>char</span> aryStr[] = <span>"</span><span>i am webabcd</span><span>"</span><span>;

    </span><span>//</span><span> 字符串长度</span><span>int</span> length = strlen(aryStr); <span>//</span><span> 12
    </span><span>//</span><span> 字符串占用的内存空间(如果 aryStr 赋值给别人,或当做参数传递时,其就表现为数组的首地址了,如果再对其 sizeof 的话,取得的就是指针所占用的内存空间的大小)</span><span>int</span> memory = <span>sizeof</span>(aryStr); <span>//</span><span> 13</span><span>/*</span><span>
     * 注意:
     * 1、此处通过 sizeof(aryStr) 获取到的是数组的空间占用,通过 strlen(aryStr) 获取到的是数组的长度
     * 2、然而之前我们说过,数组名 aryStr 就是数组的首地址,整个数组是以首地址开头的一块连续的内存单元
     * 3、当我们把 aryStr 赋值给别人(比如 char *s = aryStr;),或当做参数传递时,其就表现为数组的首地址了。比如在对应的形参中,如果 sizeof(ary) 的话,其得到的是指针占用的内存空间的大小
     </span><span>*/</span><span>/*</span><span>
     * 另:
     * 1、如果你知道了一个字符串的首地址,那么你就知道这个字符串的长度,因为它会以“0”结尾
     * 2、如果你知道一个普通数组的首地址,那么你是不知道这个数组的长度的,因为你不知道它在哪里结尾
     </span><span>*/</span><span>//</span><span> 写到数组了,就用“冒泡排序”举个例子吧
    </span><span>//</span><span> 记得以前去某公司 C# 笔试,题目是对一个数组排序,我写的是</span><span>/*</span><span>
    int[] ary = { 1, 9, 5, 6, 3 };
    ary = ary.OrderBy(p => p).ToArray();
    </span><span>*/</span><span>//</span><span> 结果面试官说这个不对...</span><span>void</span> bubble_sort(<span>int</span> ary[], <span>int</span><span> length);
    </span><span>int</span> ary_int[] = { <span>14</span>, <span>80</span>, <span>19</span>, <span>6</span>, <span>26</span>, <span>2</span><span> };
    bubble_sort(ary_int, </span><span>6</span>); <span>//</span><span> 2, 6, 14, 19, 26, 80</span><span>return</span><span> str_concat2(int_toString(length), int_toString(memory));
}


</span><span>//</span><span> 冒泡排序算法</span><span>void</span> bubble_sort(<span>int</span> ary[], <span>int</span><span> length)
{
    </span><span>for</span> (<span>int</span> i = <span>0</span>; i < length - <span>1</span>; i++<span>)
    {
        </span><span>bool</span> sorted = <span>true</span><span>;

        </span><span>for</span> (<span>int</span> j = <span>0</span>; j < length - <span>1</span> - i; j++<span>)
        {
            </span><span>if</span> (ary[j] > ary[j + <span>1</span><span>])
            {
                sorted </span>= <span>false</span><span>;
                </span><span>int</span> temp =<span> ary[j];
                ary[j] </span>= ary[j + <span>1</span><span>];
                ary[j </span>+ <span>1</span>] =<span> temp;
            }
        }

        </span><span>if</span><span> (sorted)
            </span><span>break</span><span>;
    }
}


</span><span>/*</span><span>
写到 for 循环,然后发现一个事情


for(int i=0;;) 这个在 C99 下是合法的

而以前的标准 for(int i=0;;) 是不合法的(不能在语句中声明变量),需要这么写
int i;
for(i=0;;);
</span><span>*/</span>

 

原文:http://www.cnblogs.com/webabcd/p/4369218.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐