| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2100 人关注过本帖
标题:C语言字符串逆序
只看楼主 加入收藏
lgjhlcd
Rank: 2
等 级:论坛游民
帖 子:12
专家分:29
注 册:2011-11-14
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:12 
C语言字符串逆序
#include <stdio.h>
void fun(char *s)
{
    int i,j;
    char a[81];
    for(j=0;s[j]!=0;j++);
    for(i=0;i<j;i++)
        a[i]=s[j-1-i];
    a[i]='\0';
    for(i=0;i<j;i++)
        s[i]=a[i];
    s[i]='\0';
    puts(s);
}
main()
{
    char a[81]="1234567";
    fun(a);
    puts(a);  
}
为什么fun()函数里的char a[81];定义为char *a;就不行了,有什么区别,拜托给讲一下,谢谢
搜索更多相关主题的帖子: include 字符串 C语言 
2016-01-23 12:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指針和數組的區別大了去。流傳的那個“數組與指針等效”觀念,本身不是那麽説,但歷來以訛傳訛,誤導無數的初學者和中學者。

授人以渔,不授人以鱼。
2016-01-23 12:27
lgjhlcd
Rank: 2
等 级:论坛游民
帖 子:12
专家分:29
注 册:2011-11-14
收藏
得分:0 
回复 楼主 lgjhlcd
不知道什么时候该定义数组还是指针。能不能给说下这里的定义char *a为什么不行吗
2016-01-23 12:42
lgjhlcd
Rank: 2
等 级:论坛游民
帖 子:12
专家分:29
注 册:2011-11-14
收藏
得分:0 
还有为什么形参的void fun(char *s)就可以void fun(char s[])这样改变
2016-01-23 12:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指針是指向某個實體的指示器,但實體是否存在呢?你要用手指向太陽,首先得知道太陽是存在的、它在那裏。不是光有個指針,對象就有了。你這裏根本就不存在被指向的對象,char* a沒用,這個時候它是亂指的,運行時當然出錯了。但數組不同,一經char a[]定義,它就真實存在被創建了。

授人以渔,不授人以鱼。
2016-01-23 12:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
所有數組,一經形參,就被蜕化爲指針,這才是那句話的前提。對數組,在定義的地方,可以直接計算它的長度,但若蜕化爲指針,是沒有辦法的,必須在形參中同時傳入它的元素個數才能避免溢出,所以數組作形參時寫a[]即可,因爲此時編譯器根本就不需要知道[]中的値是多少,它也無法處理那個値,寫也是白寫——但“多維”數組的後面那些維數,卻必須寫,即祇有第一維不用寫。

授人以渔,不授人以鱼。
2016-01-23 12:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你這個逆序程序,可以不用這樣寫的,用數據交換那個方法就可以了。

授人以渔,不授人以鱼。
2016-01-23 12:55
lgjhlcd
Rank: 2
等 级:论坛游民
帖 子:12
专家分:29
注 册:2011-11-14
收藏
得分:0 
略微懂了些,不过你的字体让我很惆怅,“實體”这是啥啊,谢谢你的解答
2016-01-23 13:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
实体,entity

授人以渔,不授人以鱼。
2016-01-23 13:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
前面説了,要指向太陽,首先得真的有太陽,太陽都不存在,你的手指祇能亂指,依據它尋找太陽,肯定錯。char* a是指向一個字符的指針,根據a定位到一個地址,這個地址存儲的數據按約定是char的,至於你要順著這個地址往前或往下期望也是char字符,那是你的事,不是a可以控制的。但char a[10]則不同了,在&a[0](對數組a等價於&a[0]),它明確這裏有10個字節是已經開闢可用的,從此往後連續10個字節都可以訪問,算得出有10個字節(但僅僅從char* a是算不出的)。

這裏,char a[10]就是一個實體,它已經存在,你可以用一個指針指向這個實體,char* p = a,就令指针p指向了&a[0]元素。

注意:使用指針,要兩個東西,對象本身和指針,就如人和名片,名片是指針,但不是人。人沒了或變了,拿著過往的名片是多餘的。指針和數組,是兩個不同的概念,流毒數十年,錯誤觀念糾不勝糾。

授人以渔,不授人以鱼。
2016-01-23 13:47
快速回复:C语言字符串逆序
数据加载中...
 
   



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

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