| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:还是指针的问题
只看楼主 加入收藏
magicxuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-9-20
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:10 
还是指针的问题
程序代码:
#include "stdio.h"
int main()
{
    char a[3][3]={"ab","cd","ef"};
    char *p;
    p=a;
    printf("%s\n",a);
    printf("%s\n",p);
    return 0;
}
这里为什么会有error C2440: '=' : cannot convert from 'char [3][3]' to 'char *'错误,而改成char[3]={"ab"}就不会有这个错误了呢?
        
2013-09-21 13:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你寫的p=a是想幹什麽?聲明p和a的時候沒弄清楚這些分別是什麽類型的變量?

授人以渔,不授人以鱼。
2013-09-21 13:17
magicxuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-9-20
收藏
得分:0 
回复 2楼 TonyDeng
a不是数组的首元素地址吗?p=a不是让p指向数组的首元素吗?我是新手,不对的请指正哈  谢谢了

每天多抽出一点时间来编程
2013-09-21 14:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
a是指針,它指向一個二維數組的入口地址,指針所指向的元素類型是指向一個指向char的指針,而你定義的p是指向一個指向char的指針,你數一數紅色的單詞和藍色的單詞數量是否匹配?所指向的數據類型不同,怎麽賦値?

授人以渔,不授人以鱼。
2013-09-21 14:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
數組char a[],等效於char* a,而數組char a[][],則演繹為char* a[],再仿照前面等效,則是char** a,而定義的char* p,是不同於類型char**的。你不要以爲是地址/指針就可以亂賦値,指針是跟所指向的類型緊密相關的,否則也不用要分別定義char* x, int* y這樣的形式,x和y的値雖然都是地址,但編譯器是認定x指向1byte的char數據、y指向4byte的int數據,x和y是不同的類型(看聲明就知道是不同的字眼),不能賦値的,int*無法賦値給char*,除非你要強制轉換,硬要編譯器把這種類型視爲另外的類型(正如非要把男人當作女人看待一樣),這樣就會有不同的行爲,出現各種各樣稀奇古怪的現象,那種用%d輸出double型數據的問題就是這樣造成的。

[ 本帖最后由 TonyDeng 于 2013-9-21 15:01 编辑 ]

授人以渔,不授人以鱼。
2013-09-21 14:59
magicxuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-9-20
收藏
得分:0 
回复 5楼 TonyDeng
   原来char a[][]等效于char **a啊,那我写的这个程序有什么办法可以用一个外来的指针输出二维数组的内容吗?还是只能用数组的下标来输出?

每天多抽出一点时间来编程
2013-09-21 15:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
定義一個char**指針,把a賦給它,讓它運動遍歷數組。其實用下標訪問比用數組清晰得多,只是很多人故弄玄虛非要用晦澀難懂的指針形式而已,好像別人難明自己就有多厲害似的。

[ 本帖最后由 TonyDeng 于 2013-9-21 15:24 编辑 ]

授人以渔,不授人以鱼。
2013-09-21 15:15
magicxuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-9-20
收藏
得分:0 
回复 7楼 TonyDeng
刚刚我用char **p试了  可是还是不行,还是会出现那个错误     在这里我只是想把指针这一节弄清楚一点

每天多抽出一点时间来编程
2013-09-21 15:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
    char a[3][3] = { "ab", "cd", "ef" };
    char* p = &(a[0][0]);
    printf_s("%s\n\n", a);
    for (int index = 0; index < _countof(a); ++index)
    {
        printf_s("%s\n", p);
        p += sizeof(a[index]);
    }
    _getch();
    return 0;
}


[ 本帖最后由 TonyDeng 于 2013-9-21 17:10 编辑 ]

授人以渔,不授人以鱼。
2013-09-21 15:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
    char* a[] = { "ab", "cd", "ef" };
    char** p = a;
    printf_s("%s\n\n", *a);
    for (int index = 0; index < _countof(a); ++index)
    {
        printf_s("%s\n", *p++);
    }
    _getch();
    return 0;
}


[ 本帖最后由 TonyDeng 于 2013-9-21 16:55 编辑 ]

授人以渔,不授人以鱼。
2013-09-21 15:51
快速回复:还是指针的问题
数据加载中...
 
   



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

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