我正在尝试在学习 C 语言的同时实现 Jagged Array 的概念。
我的代码如下: -
#include<stdio.h>
#include<stdlib.h>
int main() {
int r,**a,n,i,j,*ptr;
do {
printf("Enter no. of Rows : ");
scanf("%d",&r);
if(r<0)
printf("\nPlease enter a positive value\n\n");
} while(r<0);
a = (int**)malloc(r * sizeof(int*));
for(i=0; i<r; i++) {
printf("\n");
do {
printf("Enter no. of elements in row %d : ",i+1);
scanf("%d",&n);
if(n<0)
printf("\nPlease enter a positive value\n\n");
} while(n<0);
*(a+i) = (int*)malloc((n+1) * sizeof(int));
printf("\n");
printf("Input Row %d elements : ",i+1);
for(j=0; j<n; j++)
scanf("%d",&(*(*(a+i)+j)));
(*(a+i))+j = NULL;
}
printf("\n\nYou entered :-\n\n");
for(i=0; i<r; i++) {
for(j=0; (*(a+i))+j; j++)
printf("%d\t",*(*(a+i)+j));
printf("\n");
}
for(i=0; i<r; i++)
free(*(a+i));
free(a);
return 0;
}
编译时会出现错误:-
26 错误:需要左值作为赋值的左操作数
基本上对于这行代码,我获取每个指针元素的值并将每行中的最后一个指针元素分配给 null :-
printf("Input Row %d elements : ",i+1);
for(j=0; j<n; j++)
scanf("%d",&(*(*(a+i)+j)));
(*(a+i))+j = NULL;
基本上这个锯齿状数组的概念是它输入行数,然后分别输入每行中的元素数,然后输入那么多元素。
我在每个行指针中创建一个 (n+1) * sizeof(int) 的动态数组,其中 n 是该行中的元素数。第 (n+1) 个元素用于存储空指针,以便在显示数组时我们可以在哪里找到下一行。
很抱歉发布整个代码,但由于我不知道代码中可能出现的问题,所以我发布了整个代码。
任何帮助,将不胜感激。
谢谢