C指针和调用方法?

C指针和调用方法?,c,pointers,C,Pointers,我是C新手,很难理解如何用指针调用方法。目前,这段代码应该反转以null结尾的字符串,但我得到了错误 main.c:8:12:错误:使用未声明的标识符“sas” char*N=sas; ^main.c:10:10:警告:将“char”传递给类型的参数的整数到指针转换不兼容 “char*”;删除*[-Wint转换] 反向(*N); ^~./header.h:3:27:注意:将参数传递到参数'N'此处外部无效反转(char*N); 我的实际代码是: 主要内容: #包括 #包括 #包括“head

我是C新手,很难理解如何用指针调用方法。目前,这段代码应该反转以null结尾的字符串,但我得到了错误

main.c:8:12:错误:使用未声明的标识符“sas”
char*N=sas;
^main.c:10:10:警告:将“char”传递给类型的参数的整数到指针转换不兼容
“char*”;删除*[-Wint转换]
反向(*N);
^~./header.h:3:27:注意:将参数传递到参数'N'此处外部无效反转(char*N);
我的实际代码是: 主要内容:

#包括
#包括
#包括“header.h”
int main(int argc,char*argv[])
{ 
char*N=sas;
反向(*N);
}
反向:

#包括
#包括“header.h
#包括
无效反向(字符*str)
{
char*end=str;
焦炭温度;
printf(“这是*str:%c\n”,*str);
如果(str)
{ 
while(*结束)
{
++完:
} 
结束--;
while(str
标题h:

#定义外部
外部无效反转(字符*N)

感谢您的帮助和时间!

据我所知,您正在尝试反转字符串。这只是对您的代码的一个轻微修改

完整资料来源:

#include <stdio.h> 
#include <stdlib.h> 

void reverse(char *N);

int main(int argc, char *argv[]) 
{ 
  char strSas[] = "sas";
  reverse(strSas);
}

void reverse(char *str)
{
  char* end = str; 
  char temp; 
  if(str) {       
    printf("this is *str: %c\n", *str); 
    while(*end) {
      ++end;
    } 
    end--; 
    while(str < end) { 
      temp = *str;
      *str = *end; 
      *end = temp;

      ++str;
      --end;
    }
  }
}
#包括
#包括
无效反向(字符*N);
int main(int argc,char*argv[])
{ 
字符strSas[]=“sas”;
反向(STRAS);
}
无效反向(字符*str)
{
char*end=str;
焦炭温度;
如果(str){
printf(“这是*str:%c\n”,*str);
while(*结束){
++结束;
} 
结束--;
而(str
首先,这段代码中有许多语法错误:

  • “sas”这是什么?您的编译器认为它是一个变量,但找不到任何具有该名称的变量。如果要输入“sas”字符串,请执行以下操作:

    char* N = "sas";
    
  • 前后不一致的括号。结束括号多于开始括号,并且在声明函数后没有开始括号


  • 首先将
    N
    指向字符串常量。然后尝试反转
    N
    指向的内容。但是由于
    N
    指向字符串常量,因此尝试反转字符串常量。根据定义,常量的值不能更改。

    1。请选择更好的编码样式,这种样式很难使用下面,2.什么是
    sas
    ?你想做什么?3.你的代码有几个不编译的原因,例如你有
    ++end:
    ??和许多显然不需要的大括号,尽管我怀疑你可能遗漏了代码。你可能需要
    char*N=“sas”
    (一个字符串),您应该调用
    reverse(N)
    。然后您将崩溃,因为字符串不可修改。因此,实际上,您需要
    char N[]=“sas”
    。当然,很难发现原始字符串和反转字符串之间的差异。您可能应该使用
    char N[]=“xyz”进行测试";或其他非对称的东西。在
    reverse()中打印时,
    将打印单个字符,而不是整个字符串。您也应该在
    main()
    中打印“after”字符串。否则,您将不知道代码是否进行了正确的更改。
    reverse()
    没有阻塞。请发布完整的代码,精简到相关部分。对不起,我正在编写一本采访手册,这是他们的代码——除了主要方法之外——所以相反的方法就是整个方法。我只是不知道该怎么称呼这个东西。很抱歉,我的代码写得很糟糕,但我是C语言的外国人。
    reverse(*N)
    的可能重复项不会编译,因为
    reverse()
    需要一个
    char*
    。请注意,尝试反转字符串文字(常量字符串)可能会崩溃。
    reverse(“sas”)
    是错误的。字符串文字是只读的。另外,
    reverse()
    计算一个可能超出
    str
    数组范围的指针:对于空字符串,
    end
    将指向
    str
    前面的一个位置,这违反了标准。我并不是试图修复Chris的所有可能的边缘情况。
    int main(int argc, char *argv[]) 
    { 
        char* N = "sas"; 
        reverse(*N); 
    }