C 错误:“一元*”的类型参数无效(具有“int”)
我有一个C程序:C 错误:“一元*”的类型参数无效(具有“int”),c,pointers,C,Pointers,我有一个C程序: #include <stdio.h> int main(){ int b = 10; //assign the integer 10 to variable 'b' int *a; //declare a pointer to an integer 'a' a=(int *)&b; //Get the memory location of variable 'b'
#include <stdio.h>
int main(){
int b = 10; //assign the integer 10 to variable 'b'
int *a; //declare a pointer to an integer 'a'
a=(int *)&b; //Get the memory location of variable 'b' cast it
//to an int pointer and assign it to pointer 'a'
int *c; //declare a pointer to an integer 'c'
c=(int *)&a; //Get the memory location of variable 'a' which is
//a pointer to 'b'. Cast that to an int pointer
//and assign it to pointer 'c'.
printf("%d",(**c)); //ERROR HAPPENS HERE.
return 0;
}
有人能解释一下这个错误是什么意思吗 我已重新格式化了您的代码 错误位于这一行:
printf("%d", (**c));
要修复此问题,请更改为:
printf("%d", (*c));
*从地址检索值。**从一个地址中检索一个值,在这种情况下是从一个地址中检索另一个值
此外,该选项是可选的
#include <stdio.h>
int main(void)
{
int b = 10;
int *a = NULL;
int *c = NULL;
a = &b;
c = &a;
printf("%d", *c);
return 0;
}
必须替换为:
c = a;
这意味着指针“c”的值等于指针“a”的值。所以,“c”和“a”指向同一个地址“b”。输出为:
10
编辑2:
如果要使用双*:
#include <stdio.h>
int main(void)
{
int b = 10;
int *a = NULL;
int **c = NULL;
a = &b;
c = &a;
printf("%d", **c);
return 0;
}
由于c持有整数指针的地址,其类型应为int**:
整个程序变成:
#include <stdio.h>
int main(){
int b=10;
int *a;
a=&b;
int **c;
c=&a;
printf("%d",(**c)); //successfully prints 10
return 0;
}
一旦声明了变量的类型,就不需要将其强制转换为同一类型。因此您可以编写a=&b;。最后,您错误地声明了c。由于将其指定为a的地址,其中a是指向int的指针,因此必须将其声明为指向int的指针 Barebones C程序产生上述错误: ELI5: 老师把一块闪亮的圆形石头放在一个小盒子里,交给一个学生。大师说:打开盒子,取出石头。学生这样做了 然后大师说:现在打开石头,把石头移走。学生说:我打不开石头
学生随后被启发。我不确定是否解决了问题,打印的结果是-108149370,而不是10。是的,Sandro确实打印了10,但目标是使用双解引用打印b I.e.10的值。我认为**c是故意的。@picstand请参阅我的编辑2;这对你合适吗?还要注意答案中缺少类型转换。问题中的强制转换隐藏了将int**分配给int*的行上的问题。c=int*&a;
#include <stdio.h>
int main(void)
{
int b = 10;
int *a = NULL;
int **c = NULL;
a = &b;
c = &a;
printf("%d", **c);
return 0;
}
10
int **c;
c = &a;
#include <stdio.h>
int main(){
int b=10;
int *a;
a=&b;
int **c;
c=&a;
printf("%d",(**c)); //successfully prints 10
return 0;
}
#include <stdio.h>
int main(void)
{
int b=10;
int *a=&b;
int **c=&a;
printf("%d", **c);
return 0;
}
#include <iostream>
using namespace std;
int main(){
char *p;
*p = 'c';
cout << *p[0];
//error: invalid type argument of `unary *'
//peeking too deeply into p, that's a paddlin.
cout << **p;
//error: invalid type argument of `unary *'
//peeking too deeply into p, you better believe that's a paddlin.
}