在没有[]和()运算符的情况下在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++);
}