在没有[]和()运算符的情况下在C中打印数组-如何打印?

在没有[]和()运算符的情况下在C中打印数组-如何打印?,c,arrays,pointers,C,Arrays,Pointers,我编写了这样的代码,但它只显示了以下内容: 2 2 2 2 2 2 这不是我想要的结果 代码如下: void fun(int *tab, int n) { int i, wsk = &tab; for(i=0; i<n; i++) { printf("%d\n", *(tab+1)); } } int main(int argc, char **argv) { int tab[] = {1,2,3,4,5,6};

我编写了这样的代码,但它只显示了以下内容:

2
2
2
2
2
2 

这不是我想要的结果

代码如下:

void fun(int *tab, int n)
{
    int i, wsk = &tab;
    for(i=0; i<n; i++)
    {
        printf("%d\n", *(tab+1));
    }
}

int main(int argc, char **argv)
{
    int tab[] = {1,2,3,4,5,6};
    fun(tab, 6);

    return 0;
}
改变

在这两个项目中:

int i, wsk = &tab;
应该是:

int i, *wsk = tab;
编辑:OP实际上在标题中也有此约束,但没有[]和运算符。
虽然通常是指cast运算符的运算符,但在C标准中,函数调用的类型也被称为函数调用运算符,并在标准中与后缀运算符一起列出。因此,我认为这个OP约束是错误的,因为如果没有函数调用,我怀疑OP问题是否有任何有效的答案

您想打印tab指向的对象,所以不要使用&tab

for(i=0; i<n; i++)
{
    printf("%d\n", *(tab+i));
}
在第一个版本中,您总是打印第二个元素,*tab+1基本上是 哪个选项卡指向第二个元素+1 您想要的是tab指向的+一个每次迭代增加1的计数器,这是您的i:

编辑: 对不起,我没注意到你也不想要。 *标签++

。。。没有[]和运算符

那么应该是这样的:

void fun(const int * tab, const size_t n)
{
  const int * wsk = tab;
  size_t i = 0;
  for(; i < n; ++i, ++wsk)
  {
      printf("%d\n", *wsk);
  }
}

没有分组括号,也没有下标。无杂波:

void fun(int *tab, int n)
{
    while (n--)
        printf("%d\n", *tab++);
}

在第一个代码中,将*tab+1更改为*tab+i。请删除wsk。没有运算符意味着什么?没有:int*tabi=tab+i;printf%d\n,*tabi;如果不使用括号作为表达式分组运算符,或者根本不使用括号,则可能是错误的impossible@alk你对这件事有兴趣吗?如果不更改操作优先级,它将作为*tab+1执行,表示:1。使用0 shift取消命名选项卡指针-我们得到0的元素=1;2.加1=2@克尼努格:啊,那么到目前为止所有的答案都是错的?没有操作符?@alk除了这个答案中没有使用的cast操作符外,C中没有其他操作符。如果no运算符实际上是指没有,那么printf就不能使用,如果没有函数调用可以使用,我怀疑这个问题是否有任何解决方案。我完全同意运算符的说法,只是试图引起评论。。。对不起,谢谢@ouah@alk我认为OP约束被放错了方向,我在我的答案中添加了一个编辑;我!=tab+n;i++printf%d\n,*i@弗拉斯塔库:比我的行动更多。这是最好的:
int i, *wsk = tab;
for(i=0; i<n; i++)
{
    printf("%d\n", *(tab+i));
}
void fun(const int * tab, const size_t n)
{
  const int * wsk = tab;
  size_t i = 0;
  for(; i < n; ++i, ++wsk)
  {
      printf("%d\n", *wsk);
  }
}
void fun(int *tab, int n)
{
    while (n--)
        printf("%d\n", *tab++);
}