错误代码
#include <stdio.h> void circle(char str[50]) { char str1[50]; for (int i = 0; i <= 3; i++) { str1[i] = str[i]; } for (int i = 0; i <= 3; i++) { str[i] = str1[3 - i]; } //return str[50]; } int main() { char str[50] = { 0 }; //gets_s(str); scanf("%s", str); circle(str[50]); //上述错误"char" 类型的实参与 "char *" 类型的形参不兼容 //错误 C2664 “void circle(char[])”: 无法将参数 1 从“char”转换为“char[]” //circle(str); }错误"char" 类型的实参与 “char *” 类型的形参不兼容 错误 C2664 “void circle(char[])”: 无法将参数 1 从“char”转换为“char[]” 函数中
char str[50];这里str是一个指针,是一个地址 char* 而 str[50]是一个char类型的字符数组 假如写
scanf("%d",str);//char*是不用加取地址的符号&的。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int StringLength(char* str){ if (str == ‘\0’){ return 0; } return 1 + StringLength(str+1); } void ReverseString(char str){ int len = StringLength(str); //第一个字符与最后一个字符交换 //交换后,令最后一个字符为’/0’,递归调用,再将最后一个字符附上第一个字符 if (*str != 0){ char tmp; tmp = str[0]; str[0] = str[len - 1]; str[len - 1] = ‘\0’; ReverseString(str + 1); str[len - 1] = tmp; } } int main(){ char arr[1024] = { 0 }; printf(“请输入字符串:\n”); scanf("%s", &arr); ReverseString(arr); printf(“字符串中的字符反向排列为:\n%s\n”, arr); system(“pause”); return 0; } ———————————————— 版权声明:本文为博主「cerf-volant」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_42142477/article/details/83060487
这里观察转载来的博主的函数,
int StringLength(char* str)这里str显然是char *,也就是一个指针 转载来博主的主函数中的调用函数,
ReverseString(arr);这里的arr 也是 char*类型的,也就是一个指针。
函数调用时,形参和实参的类型应当保持一致。
char str[50]; 类型名称charstr[50]char *str错误之处在于,
circle(str[50]);中的实参是char类型。 而函数
void circle(char str[50])是char *类型。 这是为什么呢? 调用的时候 只要 函数名 本质上 就是传这个数组首地址去