教程集 www.jiaochengji.com
教程集 >  脚本编程  >  C语言  >  正文 C 函数与多维数组的笔记

C 函数与多维数组的笔记

发布时间:2018-10-04   编辑:jiaochengji.com
教程集为您提供C 函数与多维数组的笔记等资源,欢迎您收藏本站,我们将为您提供最新的C 函数与多维数组的笔记资源
因为有的时候我们会手贱在函数中传参导致修改数组值,所以就产生了这个东西,特点其实是让编译器报错,告诉你这里不应该被改变。

如:int sum(const int ar[], int n)

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy3082')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy3082>

如果const int days[MONTHS] = {31, 28, 31},则数组内容就不能改变了。

如果:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy3956')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy3956>

double rates[5] = {88.9, 100.12, 59.45, 183.11, 340.5};
const double * pd = rates;

则不能用pc来修改他所指向的数值,可是我们还是能通过rates[0]来修改,因为rates并不是常量。

如果我们换个写法double * const pc = rates那么就可以修改数据,却不能移动指针。

如果将上面两者结合使用,就相当于用了强力胶,怎么都动不了了:const double * const pc = rates。

例子

 看下面的代码,一般通过int [2][3]等类型初始化的数组,可以使用int (*)[3] 的类型参数作为函数形参。直接使用int a[2][3]作为形参也是可以的。

 

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7927')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7927>

#include <stdio.h>
#include <stdlib.h>
void show(int* *a)
{
    //函数中使用int** 类型,可以作为一个动态的二维数组使用
    printf("%dn",**a);
}
//参数类型使用int (*a)[2]的形式来引用二维数组变量。其中涉及到指针类型的转换。
void sshow(int (*a)[2])
{
    //使用int [][]声明的数组,在内存中的分配其实是一连串的内存数据,所以要
    //访问int [][]这种的二维数组,需要声明int (*a)[2] 的基类型,这样c才能知道数组中的维数。
    printf("%dn",**a);
}
//传参数中的int a[]  其实和int *a访问一样,操作也和指针操作一样
void show2(int a[])
{
    //参数中传递int* a  和int a[]效果一样
    printf("%dn",*a);
    printf("%dn",a[0]);
}
int main()
{
    //二维数组
    int n1[2][3]={{1,2},{4,8,4}};
    //一维数组
    int np1[2]={11,23};
    int np2[2]={64,25};

    //指针数组,指针数组和2维数组不同,指针数组,其实是数组中存放的是指针类型
    //而2维数组,使用这种情况分配的话,int n1[2][2]={{1,2},{4,8}}; 其实在内存中还是连续的int数据。
    int *p[2]={np1,np2};
    //使用指针数组 p[1]表示数组中第二个int*指针。通过解引用这个指针可以访问指针内容。
    //*(p[1] 1) 访问指针指向的下一个int数据
    printf("%dn",*(p[1] 1));

    //int指针 此时通过n就可以访问一维数组np1内容
    int *n=np1;

    //指向int指针的指针 并指向np1数组首地址。
    int **rp;

    //通过calloc来动态分配内容给指针
    //先动态分配2个int*类型。calloc返回的总是void*,这里返回的是一个int**指针,指针
    //指向的内存中存放的是2个连续地址,地址内容是int*指针,calloc分配的默认此int*指针地址值为0
    rp=calloc(2,sizeof(int*));
    //动态分配一个指针给rp执行内存中的int*指针,此指针指向2个连续的地址单元,大小为int。初始值为0
    *rp=calloc(2,sizeof(int));
    //同样分配第二个
    *(rp 1)=calloc(2,sizeof(int));
    //通过2级解引用指针,给其中一个int单元赋值。
    **rp=5;

    //int** 指针当数组使用 说明标准c中默认数组访问和指针是相通的。
    printf("%dn",rp[0][0]);
    show(rp);
    show2(n);
 return 0;
}

您可能感兴趣的文章:
c#多维数组初始化学习笔记
一些php数组的学习入门笔记
一个去除二维数组中重复项的php函数
php数组排序方法大全(脚本学堂整理奉献)
php多维数组转字符串及多维数组转一维数组的代码
c# 交错数组讲解
SQLite3数据库操作学习笔记
C 函数与多维数组的笔记
笔记本电脑散热不好什么原因,笔记本散热差的解决办法
[Go 教程系列笔记] goroutine(协程)

[关闭]
~ ~