首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针到数组和指针数组的内存分配

指针到数组和指针数组的内存分配
EN

Stack Overflow用户
提问于 2015-09-14 09:08:29
回答 1查看 344关注 0票数 3

下面是我卡在上面的代码的一部分。我想动态分配内存给

  • 指向数组的指针
  • 指针数组

我得到了一些错误消息,比如从int *到int的无效转换等等。

指向数组的指针

代码语言:javascript
复制
int (*array)[nrows][ncolumns];
array = (int*)malloc(nrows * ncolumns * sizeof(int));


printf("\n Enter the elements:\n");

for(i=0; i<nrows; i++)
{
    for(j=0; j<ncolumns; j++)
    {
        scanf("%d", array[i][j]);   
    }
}

printf("Entered array is :\n\n");

for(i = 0;i<nrows; i++)
{
    for(j = 0; j<ncolumns; j++)
    {
        if(j== ncolumns-1)
        {
            printf("%d \n", *array[i][j]);
        }
        else
        {
            printf("%d", *array[i][j]);
        }

指针数组

代码语言:javascript
复制
int *array[nrows][ncolumns];
array[nrows][ncolumns] = (int*)malloc(nrows * ncolumns * sizeof(int));

printf("Enter elements:\n");

for(i = 0; i<nrows; i++)
{
    for(j = 0; j<ncolumns;j++)
    {
        scanf("%d",&array[i][j]);


    }
}


printf("Entered array is: \n");
for(i = 0; i<nrows; i++)
{
    for(j = 0; j<ncolumns;j++)
    {
        if(j == ncolumns-1)
        {
            printf("%d \n",array[i][j]);
        }
        else
        {
            printf("%d \t",array[i][j]);
        }


    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-14 09:55:03

指向数组的1>指针

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(void){
    int nrows    = 3;
    int ncolumns = 4;
    int i, j;

    int (*array)[nrows][ncolumns];//do you want <<int (*array)[ncolumns]>> ?
    //like as int src[nrows][ncolumns]; array = &src;
    array = malloc(nrows * ncolumns * sizeof(int));//(int*) : type mismatch

    printf("\nEnter the elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            scanf("%d", &(*array)[i][j]);
        }
    }

    printf("Entered array is :\n\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", (*array)[i][j]);//need ( )
        }
        putchar('\n');
    }
    free(array);
    return 0;
}

2>指针阵列

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(void){
    int nrows   = 3;
    int ncolumns = 4;
    int i, j;

    int *array[nrows][ncolumns];
    int *src = (int*)malloc(nrows * ncolumns * sizeof(int));//no need (int*)

    printf("Enter elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns;j++){
            array[i][j] = &src[ i * ncolumns + j];//pointer pointed to entity (src[ i * ncolumns + j])
            scanf("%d", array[i][j]);//type of array[i][j] is int *
        }
    }

    printf("Entered array is: \n");
    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", *array[i][j]);//need * for dereference
        }
        putchar('\n');
    }

    free(src);
    return 0;
}

3>选项

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(void){
    int nrows    = 3;
    int ncolumns = 4;
    int i, j;

    int (*array)[ncolumns];
    array = (int (*)[ncolumns])malloc(nrows * sizeof(*array));//sizeof(*array) : sizeof(int[ncolumns])

    printf("\nEnter the elements:\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            scanf("%d", &array[i][j]);
        }
    }

    printf("Entered array is :\n\n");

    for(i = 0; i<nrows; i++){
        for(j = 0; j<ncolumns; j++){
            if(j != 0)
                putchar(' ');
            printf("%d", array[i][j]);
        }
        putchar('\n');
    }
    free(array);
    return 0;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32561023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档