| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 706 人关注过本帖
标题:问个指针的题。。。不是无脑求答案。。
只看楼主 加入收藏
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
以下是引用黄昏黄昏在2013-1-14 14:58:15的发言:

你这段代码能通过编译???
函数定义那里char * str_rev(char *str[], char *s[]) ,形参和你传入的实参类型根本不一样,main里你传入的是*型,而这里是**型;
    int s1,i;  
    str=s1=s;   //指针不是整型,内存地址的表示也不是int型,这里的表示错了;
return *str;   //你定义的函数返回值类型是char*型的 ,而这个语句表示返回的字符串str的第一个字母,类型不符合

有点晕 能不能说下怎么改?
2013-01-15 08:10
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 9楼 embed_xuel
把字符串的长度记录下,然后我想首地址直接加上长度就是最后一个字符了
2013-01-15 08:12
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 101
char * str_rev(char *str, char *s)
{
    int len,i,len1;
    len=len1=0;
    while(*(s+len)!='\0')
    {
        len++;
    }
    len--;
    len1=len;
    str=s;
    for(len=0;len<len1;len++)
    {
        printf("s:%c\n",*(s+len));
        printf("str:%c\n",*(str+len));
    }
    for(i=0;len>=0;len--)
    {
        *(str+i)=*(s+len);
        i++;
    }
    for(len=0;len<len1;len++)
    {
        printf("s:%c\n",*(s+len));
        printf("str:%c\n",*(str+len));
    }
    return str;
}
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN];
    gets(s);
    puts(str_rev(str, s));
    puts(str);
    return 0;
}


这是新写的代码,又有问题了。
就是
程序代码:
for(i=0;len>=0;len--)
    {
        *(str+i)=*(s+len);
        i++;
    }

这里,我本来想着是s不变,然后利用s把str变成s的逆序。
结果调试发现好像是str跟s的对应位置的字符交换位置了。
想不明白
2013-01-15 09:02
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
救命。。
2013-01-15 10:40
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 11楼 Sornets
这样
程序代码:
char * str_rev(char *str, char *s) //这里的形参类型应该是char *str或char str[];
{
    char *s1=s;                    /*原来的i你没有用到,所以去掉了; 而且原来的是str=s1=s;你的本意是让这两个形参和一个局部变量值相等,但这样的话显然从main里通过函数str_rev传入str和s就没有意义了,而且虽然可以达到目的,但是形式并不规范;而且内存地址不是int型,虽然可以用int型表示,但绝不是int型,所以类型不同,不能赋值,会报错;*/
    while(*s!='\0')               
    {
        s++;
    }
    s--;
    for(;s>=s1;)
    {
        *str=*s;
        str++;
        s--;
    }
    *str='\0';                     /*这里的str是个字符数组,其元素可以是任意字符,但是当你在main中以%s的字符串形式输出时就会有错,因为如果一个字符数组没有'\0'就不能成为字符串,在以%s 格式printf时就会一直输出,知道在内存终于到一个'\0'为止*/
    return str;                   //自定义函数是char*型的,而原来这里return *str,*str不是字符指针,而是字符串str的首个字符,首先这个函数就错了;
}


 

[ 本帖最后由 黄昏黄昏 于 2013-1-15 18:01 编辑 ]

得不到的永远在骚动,被偏爱都有恃无恐
2013-01-15 17:56
快速回复:问个指针的题。。。不是无脑求答案。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030404 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved