我写了这样的代码,但它只显示了这个:
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;
}
我试过的第二个版本根本不起作用:
void fun(int *tab, int n)
{
int i, wsk = &tab;
for(i=0; i<n; i++)
{
printf("%d\n", *(wsk+i));
}
}
int main(int argc, char **argv)
{
int tab[] = {1,2,3,4,5,6};
fun(tab, 6);
return 0;
}
Code :: Blocks说:
|49|error: invalid type argument of unary ‘*’ (have ‘int’)|
答案 0 :(得分:4)
没有分组括号,也没有下标。没有杂乱:
void fun(int *tab, int n)
{
while (n--)
printf("%d\n", *tab++);
}
答案 1 :(得分:3)
更改
printf("%d\n", *(tab+1));
到
printf("%d\n", *(tab+i));
在两个计划中:
int i, wsk = &tab;
应该是:
int i, *wsk = tab;
编辑: OP实际上在标题without [] and () operators
中也有此约束。
虽然通常引用转换运算符的()
运算符,但函数调用的()
在C标准中也称为函数调用运算符,并列出标准中的后缀运算符。因此我认为这个OP约束是错误的,因为没有函数调用我怀疑OP问题是否有任何有效的答案。
答案 2 :(得分:3)
...没有[]和()运算符
那应该是这样的:
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);
}
}
答案 3 :(得分:1)
您想要打印指向的标签,因此请勿使用&amp; tab
for(i=0; i<n; i++)
{
printf("%d\n", *(tab+i));
}
在你的第一个版本中,你总是打印第二个元素,*(tab + 1)基本上是 “什么标签指向+1”,这是第二个元素 你想要的是选项卡指向+每个迭代增加1的计数器,这是你的i:)
编辑: 对不起没注意到你也不想要()。 *标签++