前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

《C与指针》读书笔记五

qiguaw 2025-04-27 15:38:57 资源文章 5 ℃ 0 评论

指针C语言编程中应用广泛。并且与数组有交集。很多情况下数组与指针结合使用可以事半功倍。我们可以声明一个数组,并且将其初始化。

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

数组在声明时可以同时初始化。以上语句的结果就是声明一个数组,同时初始化该数组。等价于以下语句:

int arrary[10];

int i;

for( i = 0; i < sizeof (arrary ); i++ )

{

arrary[i] = i;

}

初始化结束后,在内存中存储如下:

数组是通过数组名和下标的结合使用的。arrary是数组名,相当于数组的第一个成员的首地址。下标相当于偏移量。arrary[2]的地址其实相当于arrary+2*sizeof(int)。int是数据类型。在有的系统中是4,在有些系统中是2。在此我们假设int类型是4个字节。

既然数组通过地址索引使用的,指针也是地址,那么之间就有天然的共性。所以必定有相同之处。比如我们要实现一个数组复制给另外一个数组。可以使用参照一个产品手册中提供的示例代码。

作者通过memcpy实现了src1 数组复制给dst1。我们可以看一下memcpy函数的原型说明。

dst1与src1是我们声明的数组。正因为dst1与src1也是地址,与指针意义完全相同,所以实现了数组复制。

memcpy是C编译器提供标准库函数。我们也可以自己实现一下,因为是示例,就不过多考虑安全性问题了。

void *MemCopy( void *dest, void *src, int len)

char *temp;

temp = dest;

for( i =0; i < len; i++)

{

temp[i] = src[i];

}

return dest;

}

temp[i] = src[i];我们仍然按照数组方式处理了指针。在这本书上,我看到一种表示方法。arrary[2]其实等价于*(arrary+2).也就是

arrary[2] = 2;等价于*(arrary+2)=2;

m = arrary[2]; 等价于m =*(arrary+2);

熟练以后,如果遇到需要数组复制的,可以自己动手实现。就不使用库函数了。使用指针传递一个数组,确实在传参方面效率提高很多。比如排序,只要传入数组的首地址和长度即可。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表