注册 登录
编程论坛 C++教室

什么时候用动态指针、什么时候用静态指针?

FollowDream 发布于 2017-01-12 17:24, 3432 次点击
请教大家两个有关指针的问题:

问题一是指针的定义:为什么下面代码中,(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获取动态分配的内存空间地址?分配和不分配有区别么?什么时候用动态指针、什么时候用静态指针?
   
恳请指点!谢谢了先!
4 回复
#2
rjsp2017-01-12 19:45
听不明白

int main ( void )
{
    int m = 123;
    printf( "%d\n",  return_test(&m) );
    return 0;
}
#3
ml2325282017-01-13 16:57
程序只能修改和读取属于程序自己的内存地址。比如:int m=123; int *p = &m; m的内存是程序自己分配的,所以*p可以修改和访问。
p = (int*)123表示p指向内存地址为123的地方。使用*p解引用来访问这块内存地址的值,123这种内存地址,目前不管什么操作系统都会访问违规
有些操作系统会提供api来访问和修改内存的值。比如windows:函数VirtualProtect修改内存的权限,WriteProcessMemory函数修改内存保存的值。
#4
FollowDream2017-01-13 18:25
回复 3楼 ml232528
谢谢!
#5
FollowDream2017-01-13 18:27
回复 2楼 rjsp
其实还是我的代码有点问题。谢谢!
1