点击这里给我发消息 点击这里给我发消息

C语言中灵魂数组和指针的互操作

添加时间:2013-12-7
    相关阅读: C语言

  我们一般都认为数组是一维的数据存储结构,因为二位数组或者说矩阵都可以看作是多个一维数组的组合结构,定义在其上的数据存储访问方式是一样的。所以一维数组是其中最基础的最重要的部分,只有理解了此类数据结构的本质才能触类旁通了。

  数组(array)是若干同类变量的聚合,允许通过统一的名字饮用其中的变量。所以数组也就是一个同一类型的数据的有限集合。可以通过下表来访问数组中的某一/些数组元素。

  在C语言中数组都由连续的内存区域构成(有时候,不一定是这样),最低地址对应首元素,数组的下标是从0开始的,所以首元素也就是数组下标为0的元素,最高的地址对应最末的元素,即第N-1个元素(如果我们定义的数组为N元)。

  数组的定义方式:

  在C语言中允许在声明数组的时候同时对其进行初始化,也可以把声明和定义放在不同的位置,初始化的一般的类似于如下的表达式:

type_specifier array_name[size1]...[sizeN] = {value_list};

  其中vlaue_list是由逗号(,)分隔的常量表,常量表必须和type_specifier兼容。最后由分号与下一个语句分隔。由此可见一维数组的定义方式为:

type_specifier

array_name[size] = {value_list};

如下:

char hello[12] = {’H’,’e’,’l’,’l’,’o’,’,’

,’ ’,’w’,’o’,’r’,’l’,’d’,’\\0’};

  注意:字符数组是一\"’\\0’\"收尾的,这是C标准的一部分。因为在操作字符数组的时候是以’\\0’作为结束判断的标志。当然了,如果你定义的是一个字符串那就不用加这个’\\0’了。因为有机制帮助你自动添加。

  上面的例子的串的生命方式为:string hello = \"Hello, world\";(当然了,具体的实现中你必须把\"string.h\"头文件加入到你的文件中),或者你也可以这样来声明:

  char *hello = \"Hello, world\";或者char hello[] = \"Hello, world\";

  切换为字符指针数组,其效果是一样的);数组初始化的时候还可 以不标明最大小,即

  char hello[] = {’H’,’e’,’l’,’l’,’o’

,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’

\\0’};,

  这时候编译器会根据后边的赋值情况为数组分配合适的内存空间,这个你不用担忧,除非机器正处于内存缺状态。

  数组元素的访问:

  可以利用循环结构来挨个访问数组的元素,比如:

[...]

int i;

char hello[12] = {’H’,’e’,’l’,’l’,’o’,’

,’,’ ’,’w’,’o’,’r’,’l’,’d’,’\\0’};

[...]

for(i = 0; i < 12; i++){

printf(\"%c\",hello[i]);

}

printf(\"\\n\");

[...]

  其中有一点必须注意了,那就是i的值不能取到12,因为我们的下标识从0开始的,即hello[0]是第一个元素,数组的下界,而hello[12]是第一个空元素,数组的上界。

  其实,数组元素的个数等于定义时的下标,也等于数组的上界(12)减去下界(0)得到的数值,还等于上界地址减去下界地址模sizeof(tyep_specifier)的值(假设数组空间是连续分布的,如果不是这样那么这种方法也就不成立了)。

相关C语言中灵魂数组和指针的互操作

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册