微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C数组赋值使用大括号语法

我正在使用C的显示界面.这是简化的代码

#include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define A_BITMAP {1,2,3}
    void getA(int **a){
        a[0]=(int*)malloc(12);
        memcpy(a[0],(int[])A_BITMAP,12);                                                                                                            
    }
    void main(){
        int* a;
        getA(&a);
        printf("%d",a[2]);
        free(a);
    }

A_BITMAP是一张图片的位图数组,我无法修改代码.这是我的问题:

>有没有办法不使用memcpy()分配宏A_BITMAP的malloc(ed)区域?
> Will(int [])A_BITMAP在堆栈上生成一个大型本地数组?图片的大小约为2M,这样做是否安全?

解决方法

你可以这样投.但是,应该避免使用转换,因为它基本上告诉编译器你比它更清楚并且禁用它可以做的任何健全性检查.此外,显然你并不知道A_BITMAP将会是3个整数,你可以通过硬编码大小来打开自己的痛苦.

而且,正如Sunny所指出的那样,当这样编写时,它可能会将数组复制到堆栈中(这取决于你的编译器,但这不是我想要冒的东西).你真的不希望堆栈上有2Mb数组,相信我.

其他几点:

> a不是一个数组,它是一个指针所以使用* a而不是[0],因为它让读者感到困惑
>你不会从main返回结果,这意味着你的程序
退出时出错.

你可能想要考虑这样的事情:

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

#define A_BITMAP {1,3}

void getA(int **a) {
    static int data[] = A_BITMAP;
    *a = malloc(sizeof(data));
    memcpy(*a,data,sizeof(data));
}
int main(){
    int* a;
    getA(&a);
    printf("%d\n",a[2]);
    free(a);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐