| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3187 人关注过本帖
标题:什么时候用动态指针、什么时候用静态指针?
只看楼主 加入收藏
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
结帖率:33.33%
收藏
已结贴  问题点数:1 回复次数:4 
什么时候用动态指针、什么时候用静态指针?
请教大家两个有关指针的问题:

问题一是指针的定义:为什么下面代码中,(int*)这种定义方法会报错?
int return_test (int *p)
    {
    int temp;
    (*p) = (*p)+1;
    temp = *p; // 这里简化m和temp的关系,只是看看能不能既修改m又返回temp
    return temp;
    }
int main ()
    {
    int *p;
    p = (int*)123; // 这种指针定义不对么?
    for (i=0; i<10; i++) printf("%d ", return_test(p));
    return 0;
    }
这个程序运行起来报错“segmentation fault”……请问到底错在了哪里?

问题二是指针应该用动态、还是用静态:

再看上面的main函数里的指针,p = (int*)123; 那么是否有必要再写一句 p = (int *)malloc(sizeof(int)); 让指针m获取动态分配的内存空间地址?分配和不分配有区别么?什么时候用动态指针、什么时候用静态指针?
   
恳请指点!谢谢了先!
搜索更多相关主题的帖子: return 动态 
2017-01-12 17:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:1 
听不明白

int main ( void )
{
    int m = 123;
    printf( "%d\n",  return_test(&m) );
    return 0;
}
2017-01-12 19:45
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:1 
程序只能修改和读取属于程序自己的内存地址。比如:int m=123; int *p = &m; m的内存是程序自己分配的,所以*p可以修改和访问。
p = (int*)123表示p指向内存地址为123的地方。使用*p解引用来访问这块内存地址的值,123这种内存地址,目前不管什么操作系统都会访问违规
有些操作系统会提供api来访问和修改内存的值。比如windows:函数VirtualProtect修改内存的权限,WriteProcessMemory函数修改内存保存的值。

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2017-01-13 16:57
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
收藏
得分:0 
回复 3楼 ml232528
谢谢!
2017-01-13 18:25
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
收藏
得分:0 
回复 2楼 rjsp
其实还是我的代码有点问题。谢谢!
2017-01-13 18:27
快速回复:什么时候用动态指针、什么时候用静态指针?
数据加载中...
 
   



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

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