学习C指针之数组和指针的常用方法

10 篇文章 0 订阅

以函数返回值之外的方式来返回值

如果将指针作为参数传递给函数,此后在函数内部对指针指向的对象填充内容,就可以从函数返回多个值。

例子:

#include<stdio.h>

void func(int *a, double *b) {
    *a = 3;
    *b = 5.2;
}

int main(void) {
    int a;
    double b;
    func(&a, &b);
    printf("a = %d\nb = %f\n", a, b);

    return 0;
}

将数作为函数参数传递

想要将类型T的数组作为参数进行传递,可以考虑传递“指向T的指针”。可是,作为被调用方是不知道数组的元素的个数的,所以在必要的情况下,需要使用其他方式进行参数传递。

例子:

#include<stdio.h>

void func(int *array, int size) {
    int i;
    for (int i = 0; i < size; i++) {
        printf("array[%d] = %d\n", i, array[i]);
    }
}

int main(void) {
    int array[] = {1,2,3,4,5,6};
    func(array, sizeof(array)/sizeof(int));

    return 0;
}

可变长数组

在需要获得类型T的可变长数组时,可以使用malloc()来东台的给“指向T的指针”分配内存区域。

但是此时需要程序员自己对数组的元素个数进行管理。

#include<stdio.h>
#include<stdlib.h>

int main(void) {
    char buf[256];
    int size;
    int *variable_array;
    int i;

    printf("input array size>");
    fgets(buf, 256, stdin);
    sscanf(buf, "%d", &size);

    variable_array = malloc(sizeof(int) * size);

    for (i = 0; i < size; i++) {
        variable_array[i] = i;
    }

    return 0;
}

组合使用

可变长数组的数组

这数组指的是:数组本身的大小是不变的,数组中的元素的大小是可以变长的。

比如说:一周7天,每一天一个口号。

进行声明:char *slogan[7];

例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void read_slogan(FILE *fp, char **slogan) {
    char buf[1024];
    int i;
    for (i = 0;i < 7; i++) {
        fgets(buf, 1024, fp);

        /*删除换行字符*/
        buf[strlen(buf) - 1] = '\0';

        /*分配保存一个标语的内存空间*/
        slogan[i] = malloc(sizeof(char) * (strlen(buf) + 1));

        /*赋值标语的内容*/
        strcpy(slogan[i], buf);
    }
}

int main(void) {
    char *slogan[7];
    int i;
    read_slogan(stdin, slogan);
    
    /*输出读取的标语*/
    for (i = 0; i < 7; i++) {
        printf("%s\n", slogan[i]);
    }

    return 0;
}




可变长数组的可变长数组

这数组指的是:数组本身的大小是可变的,数组中的元素的大小是可以变长的。

命令行参数

int main();

int main(int argc, char *argv[ ]);

数组的可变长数组

double (*polyline)[2];   //两个值构成一个点的坐标

/*npoints是构成多点折线的坐标的个数*/
ployline = malloc(sizeof(double[2]) * npoints);

或者这样写:

typedef double point[2];
point *polyline;

polyline = malloc(sizeof(point) * npoints);

纠结于“可变”之前,不妨考虑使用结构体。

不想写了,今天好累啊。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值