返回c中函数的指针

返回c中函数的指针,c,pointers,C,Pointers,写入函数,获取字符串s和字符c,检查字符是否显示在s中,如果是,则返回指向c在s中显示的第一个位置的指针 这是我的密码。我不确定我对“返回指针”做了什么,这是正确的吗 #include <stdio.h> char *foo(char s[], char c) { int i; char *ptr; for(i=0;s[i];i++) { if(s[i]==c) { printf("result:

写入函数,获取字符串
s
和字符
c
,检查字符是否显示在
s
中,如果是,则返回指向
c
s
中显示的第一个位置的指针

这是我的密码。我不确定我对“返回指针”做了什么,这是正确的吗

#include <stdio.h>
char *foo(char s[], char c)
{
    int i;
    char *ptr;
    for(i=0;s[i];i++)
    {
        if(s[i]==c)
        {
            printf("result: %d",i);
            *ptr=i;
            return ptr;
        }
    }
}
void main()
{
    char s[]="Error404";// some string
    char c='r';// some char
    foo(s,c);
}
#包括
char*foo(char s[],char c)
{
int i;
char*ptr;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
{
printf(“结果:%d”,i);
*ptr=i;
返回ptr;
}
}
}
void main()
{
char s[]=“Error404”;//一些字符串
char c='r';//一些char
傅(s,c),;
}

首先,您的规格不清楚。在开始编码之前,请确保规范是合理的。它没有说明如果找不到字符该怎么办,因此在知道之前不能编写此函数

函数必须始终返回某些内容,即使找不到字符。实现这一点的常用方法是在这种情况下返回空指针

指针应该指向找到的字符,而不是
i
,这是一个没有任何意义的整数

将代码更正为以下内容:

char* foo (char s[], char c)
{
    char *ptr = NULL;

    for(int i=0; s[i]!='\0'; i++)
    {
        if(s[i]==c)
        {
            ptr = &s[i]; // point at the address of item number i in s
            break;
        }
    }

    return ptr; // will return NULL if not found, otherwise a pointer to the found item
}

首先,您的规格不清楚。在开始编码之前,请确保规范是合理的。它没有说明如果找不到字符该怎么办,因此在知道之前不能编写此函数

函数必须始终返回某些内容,即使找不到字符。实现这一点的常用方法是在这种情况下返回空指针

指针应该指向找到的字符,而不是
i
,这是一个没有任何意义的整数

将代码更正为以下内容:

char* foo (char s[], char c)
{
    char *ptr = NULL;

    for(int i=0; s[i]!='\0'; i++)
    {
        if(s[i]==c)
        {
            ptr = &s[i]; // point at the address of item number i in s
            break;
        }
    }

    return ptr; // will return NULL if not found, otherwise a pointer to the found item
}

如果
s
是字符串,则
s[i]
表示字符串中的第i个字符,而
s+i
表示指向字符串中第i个字符的指针。所以您希望返回
s+i
。如果找不到字符,您可能还希望返回
NULL

#include <stdio.h>

char *foo(char s[], char c)
{
    int i;

    for(i = 0; s[i]; i++)
    {
        if(s[i] == c)
            return (s + i);
    }
    return (NULL);
}
#包括
char*foo(char s[],char c)
{
int i;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
返回(s+i);
}
返回(空);
}

如果
s
是字符串,则
s[i]
表示字符串中的第i个字符,而
s+i
表示指向字符串中第i个字符的指针。所以您希望返回
s+i
。如果找不到字符,您可能还希望返回
NULL

#include <stdio.h>

char *foo(char s[], char c)
{
    int i;

    for(i = 0; s[i]; i++)
    {
        if(s[i] == c)
            return (s + i);
    }
    return (NULL);
}
#包括
char*foo(char s[],char c)
{
int i;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
返回(s+i);
}
返回(空);
}

为什么不运行它并检查结果呢?从外观上看,它不会损坏你的电脑。另外,对返回的值进行处理。不,您所做的不正确。一个简单的测试就会告诉你。你认为
ptr
指向什么?如果条件
s[i]==c
从来都不是真的呢?然后返回什么?另外,当您执行
*ptr=i
时,
ptr
指向哪里?您是否应该返回索引或
s
(即
&s[i]
)中的当前位置?但是如果条件从来都不是真的,您现在不返回任何内容,这将导致未定义的行为。就像取消引用未初始化的指针一样,比如
ptr
。为什么不运行它并检查结果呢?从外观上看,它不会损坏你的电脑。另外,对返回的值进行处理。不,您所做的不正确。一个简单的测试就会告诉你。你认为
ptr
指向什么?如果条件
s[i]==c
从来都不是真的呢?然后返回什么?另外,当您执行
*ptr=i
时,
ptr
指向哪里?您是否应该返回索引或
s
(即
&s[i]
)中的当前位置?但是如果条件从来都不是真的,您现在不返回任何内容,这将导致未定义的行为。就像取消引用未初始化的指针,如
ptr
。但这还不足以修复函数中的所有错误。以下是我发现的奇怪之处。如果您在设置后立即返回
ptr
,为什么还要麻烦使用它呢?不过,这还不足以修复函数中的所有错误。如果您在设置后立即返回
ptr
,为什么还要麻烦它呢