所以这是编辑过的代码!! 我是C语言的初学者,我在打印这个模式时遇到了问题。请求3行,我应该
*
**
***
我使用指针作为计数器。请帮帮我。我的代码无法正常运行..
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *a=NULL,*b=NULL,*n=NULL;
n= malloc (sizeof *n);
printf("Enter the lines\n");
scanf("%d",n);
a= malloc (sizeof *a);
b= malloc (sizeof *b);
for (*a=0; *a<*n; *(a)++)
{
for (*b=0; *b<=*a; *(b)++)
printf("*");
printf("\n");
}
free(n);
free(a);
free(b);
return 0;
}
答案 0 :(得分:6)
明显的错误出现在像*a++
这样的表达式中。运算符优先级使编译器将其解释为*(a++)
,即它递增指针而不是计数器。在这种情况下,您需要的是(*a)++
。您必须明确使用括号使这些表达式按您希望的方式工作。看起来您通过使用本地变量a
,b
和n
的无意识文本替换及其动态分配的等效项*a
,*b
和{来生成此代码{1}},但完全忘记注意运算符优先级。
在任何情况下,你都没有在这里使用“指针作为计数器”,因为你似乎错误地相信。您正在使用*n
个对象作为计数器。但是,您决定动态分配它们,而不是将这些int
对象声明为普通局部变量。这种简单的代码没有实际意义,但作为一种练习可能是有价值的。
正如评论中已经注意到的那样,一元int
和一元&
“相互湮灭”,这意味着你的*
(虽然不是错误)相当于一个普通&*n
。另外,n
应该是什么意思?它甚至不会编译。您已将*0
正确分配为*a
。为什么你突然决定将你的*a = 0
指定为*b
???额外的*b = *0
来自哪里?
最后,放弃投射*
结果的奇怪习惯。这就是您的malloc
应该是什么样的
malloc