博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言指针学习
阅读量:6094 次
发布时间:2019-06-20

本文共 1821 字,大约阅读时间需要 6 分钟。

hot3.png

我们应该实现一个通用的函数,专门用于数组的值复制,这就用到了通用指针,我们想使用一个函数使用通用型指针来接收2个数组的首地址,然后进行数组的值复制。即支持char,也支持int,也支持double,实际上这个函数可以支持所有数据类型的数组复制:

void array_copy(void *src, void *tar, int element_size, int array_size){        for (int i = 0; i < element_size * array_size; i++)        {                *(char *) tar = *(char *) src;                tar++;                src++;        }}

 array_copy函数有4个参数:

  • void *src              存放来源数组首地址的通用指针
  • void *tar               存放目标数组首地址的通用指针
  • int element_size  数组元素大小在调用时使用sizeof函数来计算
  • int array_size       数组元素个数

        有了这个函数就可以方便的对不同类型的数组做复制了:

int main(int argc, char **args){        char array_0[SIZE] =        { 'H', 'e', 'l', 'l', 'o' };        char array_1[SIZE];        int array_2[SIZE] =        { 1, 2, 3, 4, 5 };        int array_3[SIZE];        double array_4[SIZE] =        { 12.3, 23.4, 34.5, 45.6, 56.7 };        double array_5[SIZE];        array_copy(array_0, array_1, sizeof(char), SIZE);        array_copy(array_2, array_3, sizeof(int), SIZE);        array_copy(array_4, array_5, sizeof(double), SIZE);        for (int i = 0; i < SIZE; i++)        {                printf("%c ", array_1[i]);        }        printf("\n");        for (int i = 0; i < SIZE; i++)        {                printf("%d ", array_3[i]);        }        printf("\n");        for (int i = 0; i < SIZE; i++)        {                printf("%f ", array_5[i]);        }        printf("\n");}

==============

二级指针

进入正题,到底二级指针有何具体作用?

用作二维数组:

1

2

3

4

5

6

7

8

9

/* allocate m*n int array */

const int m = 2, n = 5;

int **array = NULL;

array = (int **)malloc(m * sizeof(int *));

 

int i, j;

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

    array[i] = (int *)malloc(n * sizeof(int));

}

在申请完内存后,array就可以利用下标进行访问了,可以和我们定义传统的二维数组访问方式一致。

1

int array[2][5] = {0};

但是这里需要区分是,int array[][]如此定义的二维数组在内容里的寻址空间是连续的,而int **array在申请内存后的寻址空间是分散连续的,对比图:

array.png

 

转载于:https://my.oschina.net/floristgao/blog/1835924

你可能感兴趣的文章
使用Cobbler批量部署Linux操作系统
查看>>
zabbix企业应用之服务端与客户端的安装
查看>>
实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
查看>>
无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
查看>>
Bat相关的项目应用
查看>>
Django为数据库的ORM写测试例(TestCase)
查看>>
NYOJ-107 A Famous ICPC Team
查看>>
与众不同 windows phone (44) - 8.0 位置和地图
查看>>
Visual Studio Code 使用 ESLint 增强代码风格检查
查看>>
iOS设备中的推送(二):证书
查看>>
敏捷 - #3 原则:经常提供工作软件 ( #3 Agile - Principle)
查看>>
数据结构与算法:二分查找
查看>>
使用思科模拟器Packet Tracer与GNS3配置IPv6隧道
查看>>
iOS开发-NSPredicate
查看>>
Exchange Server 2003 SP2 数据存储大小限制修改
查看>>
expr命令用法-实例讲解
查看>>
酷派8705救砖
查看>>
iOS10里的通知与推送
查看>>
# C 语言编写二进制/十六进制编辑器
查看>>
EMS SQL Management Studio for MySQL
查看>>