C 我的代码有什么问题?一元数的类型参数无效。双指针
我刚开始学习C语言,我在使用指针时遇到了各种各样的错误。我真的找不到下面的代码有什么问题。我浪费了一天时间来解决这个问题,但仍然一事无成。它表示一元数的类型参数无效。我怀疑原因是双重的。我尝试了几种解决方法。在进行比较和类似的事情之前,我试着给双指针加上括号。但没有任何帮助。 这里到底出了什么问题?我将感谢你的帮助C 我的代码有什么问题?一元数的类型参数无效。双指针,c,pointers,C,Pointers,我刚开始学习C语言,我在使用指针时遇到了各种各样的错误。我真的找不到下面的代码有什么问题。我浪费了一天时间来解决这个问题,但仍然一事无成。它表示一元数的类型参数无效。我怀疑原因是双重的。我尝试了几种解决方法。在进行比较和类似的事情之前,我试着给双指针加上括号。但没有任何帮助。 这里到底出了什么问题?我将感谢你的帮助 #include <stdio.h> #include <string.h> int isEqual(char *line, char *word){
#include <stdio.h>
#include <string.h>
int isEqual(char *line, char *word){
while(**line == **word && **line && **word){
(*line)++;
(*word)++;
}
if(**line == **word == '\0') return 1;
else return 0;
}
int main(){
int i;
int argc = 2;
char **lines;
*lines = "sort";
(*lines)++;
*lines = "revs";
if(isEqual(*lines, "sort")){
printf("Equal");
}else{
printf("Not equal");
}
}
return 0;
}
#包括
#包括
整数相等(字符*行,字符*字){
而(**行==**字和**行和**字){
(*行)++;
(*字)++;
}
如果(**line==**word=='\0'),则返回1;
否则返回0;
}
int main(){
int i;
int argc=2;
字符**行;
*lines=“sort”;
(*行)++;
*lines=“revs”;
if(等质量(*行,“排序”)){
printf(“相等”);
}否则{
printf(“不相等”);
}
}
返回0;
}
变量行
未初始化
char **lines;
因此,下一条语句已经无效
*lines = "sort";
也在函数中使用此语句
while(**line == **word && **line && **word){
char * lines[2] = { "sort", "revs" };
也无效,因为您不能对定义为char*
函数IsEqual整体无效,并且使用了无效的C结构
有效的程序可以如下所示
#include <stdio.h>
int isEqual( const char *line, const char *word )
{
while( *line == *word && *line )
{
line++;
word++;
}
return *line == *word;
}
int main( void )
{
char * lines[2];
lines[0] = "sort";
lines[1] = "revs";
if ( isEqual( lines[0], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
if ( isEqual( lines[1], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
return 0;
}
你只能写一句话
while(**line == **word && **line && **word){
char * lines[2] = { "sort", "revs" };
输出是
Equal
Not equal
变量
行
未初始化
char **lines;
因此,下一条语句已经无效
*lines = "sort";
也在函数中使用此语句
while(**line == **word && **line && **word){
char * lines[2] = { "sort", "revs" };
也无效,因为您不能对定义为char*
函数IsEqual整体无效,并且使用了无效的C结构
有效的程序可以如下所示
#include <stdio.h>
int isEqual( const char *line, const char *word )
{
while( *line == *word && *line )
{
line++;
word++;
}
return *line == *word;
}
int main( void )
{
char * lines[2];
lines[0] = "sort";
lines[1] = "revs";
if ( isEqual( lines[0], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
if ( isEqual( lines[1], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
return 0;
}
你只能写一句话
while(**line == **word && **line && **word){
char * lines[2] = { "sort", "revs" };
输出是
Equal
Not equal
首先,您需要向我们显示实际的错误消息,我认为它类似于
error: invalid type argument of unary ‘*’ (have ‘int’)
*
很重要,因为它抱怨的是操作员。请更新您的问题,以显示准确的(复制并粘贴)错误消息,并明确指出它所指的是程序的哪一行
您已将line
定义为char*
类型的对象,因此*line
属于char
类型,**line
是非法的(因为char
不是指针)
将**行
更改为*行
至少可以避免该错误。我还没花时间弄清楚这是否是你唯一需要做的改变
(顺便说一句,请避免使用短语“双指针”,它可以指类型
double*
。请改用“指针指向指针”。但是在isEqual
函数中没有指向指针的指针。)首先,您需要向我们显示实际的错误消息,我假定是这样的
error: invalid type argument of unary ‘*’ (have ‘int’)
*
很重要,因为它抱怨的是操作员。请更新您的问题,以显示准确的(复制并粘贴)错误消息,并明确指出它所指的是程序的哪一行
您已将line
定义为char*
类型的对象,因此*line
属于char
类型,**line
是非法的(因为char
不是指针)
将**行
更改为*行
至少可以避免该错误。我还没花时间弄清楚这是否是你唯一需要做的改变
(顺便说一句,请避免使用短语“双指针”,它可以指类型double*
。请改用“指针指向指针”。但是在isEqual
函数中没有指向指针的指针。)开头
int isEqual(char *line, char *word){
while(**line == **word && **line && **word){
当您通过char*line
声明line
时,您的意思是line
是指向char
类型变量的指针,这意味着line
的值是char
类型变量的地址
使用指针时,*line
表示line
所指向的char
类型变量的值。因此,当您使用**line
时,它没有任何意义,因为您试图从value*line
的地址获取值
例如,如果行
指向值为“a”的字符
类型变量,则**行
是保存在地址0x61
处的值。(因为“a”的ascii值是0x61,而C将char
视为int
)开头
int isEqual(char *line, char *word){
while(**line == **word && **line && **word){
当您通过char*line
声明line
时,您的意思是line
是指向char
类型变量的指针,这意味着line
的值是char
类型变量的地址
使用指针时,*line
表示line
所指向的char
类型变量的值。因此,当您使用**line
时,它没有任何意义,因为您试图从value*line
的地址获取值
例如,如果
行
指向值为“a”的字符
类型变量,则**行
是保存在地址0x61
处的值。(因为“a”的ascii值是0x61,而C取char作为int
)提供完整的错误消息会很有帮助,因为它无疑会指出错误在哪一行,并且可能会指出哪一个一元操作在抱怨。提供完整的错误消息会很有帮助,因为它毫无疑问地表示错误在哪一行,并且可能表示哪一个一元操作在抱怨。而且,三元比较不会按预期进行(即,它将用布尔值比较**行
)@Drew McGowen T