加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:13:29 所属栏目:百科 来源:网络整理
导读:我正在使用C的显示界面.这是简化的代码: #includestdio.h #includestdlib.h #includestring.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])
我正在使用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("%dn",a[2]);
    free(a);
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读