| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2824 人关注过本帖
标题:关于C语言指针的问题
只看楼主 加入收藏
a13594714375
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-4
收藏
得分:0 
貌似我记得,好像不可以直接给指针变量赋值吧,如果记错了,那就是*p不是一个具体的地址,搞不到他的地址,也就找不到值输出咯
2016-01-05 00:20
ZJY684
Rank: 2
等 级:论坛游民
帖 子:6
专家分:13
注 册:2016-1-3
收藏
得分:0 
上面的程序就相当于
int *p;
然后将地址0x0000000a存放在指针p内,而*p代表的在该地址下存放的是什么内容,显然上面程序是不能提供的,所以会报错。
而打印p,因为前面的%d的缘故,会将地址打印成数字。16进制中a代表10.
2016-01-06 14:17
zhangyunshen
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-7
收藏
得分:0 
当然可以给指针变量初始化赋值,前提是你是在电脑上编程,直接赋值的地址有可能是不允许的,会导致程序没法运行。

你可以先这样,找出一个能够访问的地址:

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

int main(int argc, char *argv[])
{
    int *p ;
    
    *p = 10;
    printf("%d,%x\n",*p,p);
    return 0;
}


这样会打印出一个地址:0x7efde000

然后你再这样写程序,保证不会错:

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

int main(int argc, char *argv[])
{
    int *p = 0x7efde000;
    
    //*p = 10;
    printf("%d,%x\n",*p,p);
    return 0;
}
2016-01-06 14:22
pitboy101
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-1-6
收藏
得分:0 
这样是不是有点危险?直接把内存里的一个地址给了*p?
2016-01-06 14:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用zlz66668888在2016-1-6 11:10:36的发言:

通常,不对int *p直接赋值,对它赋值意味着给p赋给一个具体地址。
如:
int *p=10;
p=p+3;
printf("%d\n",p);
打印出来的不是13。

不是這樣的

授人以渔,不授人以鱼。
2016-01-06 17:00
阿文fire
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:58
注 册:2009-7-7
收藏
得分:0 
int *p=10; // 相当于int *p; p=10;
也就是把0x00001010(二进制的“10”)这个地址直接赋值给指针p。
正确的写法应该为
int *p; *p=10
这里p的值由系统分配,比如是0x00210353,在该地址对应的内存单元中存放的值为10
2016-01-06 17:44
bcc277282419
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2015-12-27
收藏
得分:0 
回复 楼主 栋少
#include <stdio.h>
void main(void)
{
 int *p=10;
 printf("%d",p);

}
你这个能通过??你第一个int型的指针变量
你 int *p=10;就等于是把一个常量赋给一个只能存放int型变量地址变量了
也就是说p只能存放地址
2016-01-07 00:14
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:0 
直接对指针赋值肯定通不过编译,同时指针的加减量多少是根据其指向的数据类型的长度决定的,如果是char类型则是实际长度,否则是加减数*sizeof(指向类型),示例代码说明如下(代码在vc6里测试通过):
int *p;
p=(int*)10;      //将立即数强制转换为指针并赋值给p
p=p+3;           //由于p指向的类型为int,sizeof(int)=4,所以p里的值应是10+3*4=22
printf("%d",p);

代码执行结果是:22


[此贴子已经被作者于2016-1-7 07:20编辑过]

2016-01-07 07:17
快速回复:关于C语言指针的问题
数据加载中...
 
   



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

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