| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:关于指针的问题
只看楼主 加入收藏
balancad
Rank: 1
等 级:新手上路
帖 子:19
专家分:6
注 册:2014-4-21
结帖率:80%
收藏
已结贴  问题点数:15 回复次数:9 
关于指针的问题
程序代码:
#include<stdio.h>
void main()
{
    char a[] = { "asdfgh" };
    char *p = &a[3];
    printf("%c\n", *p);
}
上面输出的是*p
程序代码:
#include<stdio.h>
void main()
{
    char a[] = { "asdfgh" };
    char *p = &a[3];
    printf("%c\n", p);
}

而这里输出的是p。我想问卫生么两次输出的结果都不是一样的?就是指针这里不怎么懂。能否帮忙解释一下*p和p不是等价么在上面两端程序中。还有&a[3]的值为什么是fgh而不是f呢?指针这里真的有点晕。
搜索更多相关主题的帖子: color 
2014-06-14 22:13
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
*p和p不是等价么?
你觉得*有什么用?

总有那身价贱的人给作业贴回复完整的代码
2014-06-14 22:24
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
书还没看仔细吧,*p和p要是一个东西,那么就是这个语言的逻辑不通了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2014-06-15 06:57
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
指针基础看下,带*和不带*意义完全不一样的

我不是砖家,要努力成为砖家。
2014-06-15 09:14
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
收藏
得分:0 
* p 和 p 怎么会是一样的?p 也是一个变量,只不过它存放的不是整数、浮点数、字符类数据,p 存放的是地址,是a[3]这个元素的地址,也就是 'f' 的地址。在 p 前面加上 * 就能找到存放在 p 中地址的数据。
你自己可以输出看看
printf("%c\n", * p); //输出 p 指向的数据
printf("%#X\n", &p); //输出 p 的内存地址
printf("%#X\n", p); //输出 a[3] 的内存地址
这些是我的理解,可能不太严谨
2014-06-16 09:33
ecssse
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2014-3-29
收藏
得分:0 
指针一般指向地址
2014-06-16 14:00
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
你觉得这个代码能理解吗

程序代码:
void main()
{
    char a[] = { "asdfgh" };
    char *p = &a[3];
    printf("字符串指针p的地址是 %X   \n 该指针指向的字符是%c   \n  该指针指向的字符串是%s\n", p,*p,p);

}

DO IT YOURSELF !
2014-06-16 14:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:15 
其实定义成

char* p=????  比较好理解一些  变量是p 类型是 char*

但是有人喜欢把几个变量放在一起定义
 
char* p=???  m=???   而这样就表示定义了一个char* p  另定义了一个char m  完全不一样的
而如果定义成
 
char  *p=????  *m=???  就可以了 但是这样定义 明显不如前一种好理解

DO IT YOURSELF !
2014-06-16 15:05
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 楼主 balancad
char *p=&a[3]等价于char *p;p=&a[3].
p是指针(指针就是地址),*p是指针指向内存存储的变量,同时注意在定义指针的时候char *p这里的*p和后面用到的*p不同,前者是定义变量类型为指针。
不知道有没有讲明白。
2014-06-16 16:55
C客
Rank: 2
来 自:哈尔滨
等 级:论坛游民
帖 子:15
专家分:65
注 册:2014-6-14
收藏
得分:0 
回复 9 楼 longxingxiu
哈哈,还是p = a + 3;用起来习惯点,数组的实质就是连续的内存空间。

成功路上C客多。
2014-06-16 21:19
快速回复:关于指针的问题
数据加载中...
 
   



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

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