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
给出错误 无效使用带有未指定边界的数组
解决方案是什么?
答案 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;
}