如何在给定指针的情况下访问数组的元素

时间:2014-04-27 18:10:28

标签: c arrays pointers

struct node
{
  int a;
  node * link;
}

我有一个数组A,每个元素的类型为'指向节点的指针',因此A的每个元素都可以有可变的大小。例如

A[0]=NULL
A[1]=2->3->4
A[2]=3->4

等等.. 所以如果我使用

动态分配一个数组
u = (struct node*) malloc( m * sizeof(struct node*) )

然后

u+i = NULL

(i是任何整数)在需要Lvalue时给出错误。 如果我使用数组指针作为

struct node(*p)[];

然后使用

 (*p)+i = NULL

它给出了L值所需的错误。

*(p+i) = NULL

给出错误 无效使用带有未指定边界的数组

解决方案是什么?

2 个答案:

答案 0 :(得分:0)

我认为你想要的是:

(*p) += i;
(*p) = NULL;

p[i] = NULL;

这是一个有效的例子:

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

typedef struct s_node {
  int x;
  struct s_node *next;      
} node ;


main()
{   
    node n[5];

    n[2].x = 42;
    printf("%d\n", n[2].x);

    node *p = n;    
    printf("%d\n", p[2]);

    p += 2;    
    printf("%d\n", p->x);
}

输出:

42
42
42

考虑查看tutorial for pointer arithmetic。只需google for it或点击提供的链接。

答案 1 :(得分:0)

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

typedef struct node node;

struct node{
    int a;
    node * link;
};

void print(node *np){
    while(np){
        printf("%d->", np->a);
        np = np->link;
    }
    printf("NULL\n");
}

int main(){
    struct node four  = {4, NULL};
    struct node three = {3, &four};
    struct node two   = {2, &three};

    struct node **u;
    int m = 3;
    u = malloc(m * sizeof(struct node*));
    u[0] = NULL;
    u[1] = &two;
    u[2] = &three;
    for(int i=0;i<m;++i)
        print(u[i]);
    free(u);    
    return 0;
}