| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3004 人关注过本帖
标题:学习了两个月的指针了,对于指针数组的问题还是有疑问求助!
只看楼主 加入收藏
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:28 
学习了两个月的指针了,对于指针数组的问题还是有疑问求助!
下面的程序是输入数字月份后自动转换成英文月份(前6个月的)。其中“ps=*(name+i-1)”这一句,我可以理解成 neme 是一个指向二维数组的指针,它储存了二维数组中各字符串的首地址,给 name 取值(*)就是把它所储存的首地址赋予指针ps?
我上面说的那段话是对的吗?如果有错误还请详细纠正。
#include<stdio.h>
void main()
{
    char *name[]={"Jan","Feb","Mar","Apr","May","June"};
        char *ps;
    int i;
    printf("Enter the NO of Month:\n");
    scanf("%d",&i);
    if(i>=1&&i<=6)
    {
       ps=*(name+i-1);
        printf("No. %2d Month--> %s\n",i,ps);
    }
}
搜索更多相关主题的帖子: 英文月份 include 字符串 Enter 
2016-08-04 15:59
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
相信看过的都是好人,别只潜水嘛,搞不懂真的很困惑的!求指教!
2016-08-04 16:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:2 
不写奇怪的代码

程序代码:
#include <stdio.h>

int main( void )
{
    const char* names[] = { "Jan", "Feb", "Mar", "Apr", "May", "June" };

    int month;
    printf( "Enter the NO of Month: " );
    scanf( "%d", &month );

    if( month>=1 && month<=6 )
        printf( "No.%2d Month --> %s\n", month, names[month-1] );

    return 0;
}

2016-08-04 16:10
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 3楼 rjsp
您这个直接是数组输出月份的,我想知道用指针输出时 ps=*(neme+i-1)中的 name 到底是代表什么?指针还是数组?
2016-08-04 16:59
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 3楼 rjsp
我再用了一个指针ps来表示数组的首地址,但其中的一些对应关系我就搞混了
2016-08-04 17:03
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:2 
name是地址。
2016-08-04 17:05
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
*name是指向数组第一个元素的地址,那么name就是这地址的地址,这是双重指针。
2016-08-04 17:18
cppyjou
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:16
注 册:2016-8-4
收藏
得分:2 
你那样定义的话就是定义了一个指针数字了 *name[]里面的每一个元素都是一个指针,这跟数组指针不一样(*name)[],可以看看指针数组和数组指针的区别
2016-08-04 17:25
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
char*name[];//首先我喜欢把它理解成一个数组,这个数组里面的元素是指向一些字符串的指针
“ps=*(name+i-1)”这一句,我可以理解成 name 是一个指向二维数组的指针,name是这个数组的名字,也是首地址,(name+i-1)表示的是name[i-1]这个元素的地址 它储存了二维数组中各字符串的首地址,Name的地址和Name[0]的地址是一样的,你如果试着输出name这个地址上存储的元素,其实就会输出name【0】,给 name 取值(*)就是把它所储存的首地址赋予指针ps,(*)取值,说好了是取值,严格来说他就是取某个地址上面存储的东西,当然在这个题目里因为放了字符串,所以取值取得正好是个指针,指示字符串的首地址
我上面说的那段话是对的吗?如果有错误还请详细纠正。

----------------------------------


φ(゜▽゜*)♪
2016-08-04 18:31
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
以下是引用rjsp在2016-8-4 16:10:34的发言:

不写奇怪的代码

#include <stdio.h>

int main( void )
{
    const char* names[] = { "Jan", "Feb", "Mar", "Apr", "May", "June" };

    int month;
    printf( "Enter the NO of Month: " );
    scanf( "%d", &month );

    if( month>=1 && month<=6 )
        printf( "No.%2d Month --> %s\n", month, names[month-1] );

    return 0;
}

就这段程序来说,如果将printf输出中的“names[month-1]”换成*(names+month-1)也能编译成功且结果正确。这里我就凌乱了,如果说names是一个指针的话,那么names[month-1]和*(names+month-1)难道都代表各个字符串数组{ "Jan", "Feb", "Mar", "Apr", "May", "June" }的第month个字符串的首地址???(说真话,感觉越学越不会了...)
2016-08-04 19:42
快速回复:学习了两个月的指针了,对于指针数组的问题还是有疑问求助!
数据加载中...
 
   



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

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