在C语言中使用指针作为计数器

时间:2013-11-26 16:41:49

标签: c

所以这是编辑过的代码!! 我是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;
   }

1 个答案:

答案 0 :(得分:6)

明显的错误出现在像*a++这样的表达式中。运算符优先级使编译器将其解释为*(a++),即它递增指针而不是计数器。在这种情况下,您需要的是(*a)++。您必须明确使用括号使这些表达式按您希望的方式工作。看起来您通过使用本地变量abn的无意识文本替换及其动态分配的等效项*a*b和{来生成此代码{1}},但完全忘记注意运算符优先级。

在任何情况下,你都没有在这里使用“指针作为计数器”,因为你似乎错误地相信。您正在使用*n个对象作为计数器。但是,您决定动态分配它们,而不是将这些int对象声明为普通局部变量。这种简单的代码没有实际意义,但作为一种练习可能是有价值的。

正如评论中已经注意到的那样,一元int和一元&“相互湮灭”,这意味着你的*(虽然不是错误)相当于一个普通&*n。另外,n应该是什么意思?它甚至不会编译。您已将*0正确分配为*a。为什么你突然决定将你的*a = 0指定为*b ???额外的*b = *0来自哪里?

最后,放弃投射*结果的奇怪习惯。这就是您的malloc应该是什么样的

malloc