我正在使用指向整数的指针作为2 Dim数组,我写了这些代码但是我没有获得整数值。
#include<stdio.h>
#include<conio.h>
void main(void)
{
int **pptr = 0, size = 0, size2 = 0, i, j;
clrscr();
printf("Enter Size of Main Store n");
scanf("%d", &size);
pptr = (int **) malloc(size * sizeof(int *));
printf("Enter Size of Sub Store n");
scanf("%d", &size2);
for (i = 0; i < size; i++) {
pptr[i] = (int *) malloc(size2 * sizeof(int));
}
printf("Enter Values n");
for (i = 0; i < size; i++) {
for (j = 0; j < size2; j++) {
scanf("%dn", pptr[i][j]);
}
}
clrscr();
printf(" Valuesn");
for (i = 0; i < size2; i++, pptr++) {
printf("%dn", *pptr + i);
}
getch();
}
它打印垃圾!!
答案 0 :(得分:2)
scanf("%d", arg)
需要指向int
但
for (i = 0; i < size; i++) {
for (j = 0; j < size2; j++) {
scanf("%dn", pptr[i][j]);
}
}
你传递int
,未经初始化的int
。然后,该内存位置中的不确定值被解释为指针,并且扫描会尝试存储转换后的值who-knows-where。这不会导致分段错误。
你应该在那里传递&pptr[i][j]
作为参数。
for (i = 0; i < size2; i++, pptr++) {
printf("%dn", *pptr + i);
}
使用期望int*
参数的*pptr +i
格式打印&pptr[0][i]
%d
int
。
你应该
printf("%d\n", pptr[0][i]);
如果你想打印对角线的值(似乎是这种情况,因为你也在循环中增加pptr
),或者,更好
for(i = 0; i < size && i < size2; ++i) {
printf("%d\n", pptr[i][i]);
}
或者,如果要打印整个网格,
for(i = 0; i < size; ++i) {
for(j = 0; j < size2; ++j) {
printf("%d ", pptr[i][j]);
}
printf("\n");
}
答案 1 :(得分:0)
scanf需要int *
,而不是int
。所以......
scanf("%dn", pptr[i][j]);
应该是:
scanf("%dn", &(pptr[i][j]));
或者可能是:
scanf("%dn", (pptr[i]+j));
另外,printf需要一个值(int
),而不是一个指针。所以......
printf("%dn", *pptr + i);
应该是这样的:
printf("%dn", *(*pptr+i));
或更好看的等价物:
printf("%dn", pptr[0][i]);