Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的代码有什么问题?一元数的类型参数无效。双指针_C_Pointers - Fatal编程技术网

C 我的代码有什么问题?一元数的类型参数无效。双指针

C 我的代码有什么问题?一元数的类型参数无效。双指针,c,pointers,C,Pointers,我刚开始学习C语言,我在使用指针时遇到了各种各样的错误。我真的找不到下面的代码有什么问题。我浪费了一天时间来解决这个问题,但仍然一事无成。它表示一元数的类型参数无效。我怀疑原因是双重的。我尝试了几种解决方法。在进行比较和类似的事情之前,我试着给双指针加上括号。但没有任何帮助。 这里到底出了什么问题?我将感谢你的帮助 #include <stdio.h> #include <string.h> int isEqual(char *line, char *word){

我刚开始学习C语言,我在使用指针时遇到了各种各样的错误。我真的找不到下面的代码有什么问题。我浪费了一天时间来解决这个问题,但仍然一事无成。它表示一元数的类型参数无效。我怀疑原因是双重的。我尝试了几种解决方法。在进行比较和类似的事情之前,我试着给双指针加上括号。但没有任何帮助。 这里到底出了什么问题?我将感谢你的帮助

#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