指针
https://s1.ax1x.com/2022/10/12/xUwfij.jpg为什么是0,0 本帖最后由 jackz007 于 2022-10-12 15:27 编辑
原因是 fun() 传送计算结果的方式是无效的
void fun(int * p1 , int * s)
{
int * t ;
t = (int *) malloc(2 * sizeof(int)) ;
* t = * p1 + * p1 ++ ; // t = p1 + p1
* (t + 1) = * p1 + * p1 ; // t = p1 + p1
s = t ; // s 是局部变量,这个修改无效,也就是说,这种传送计算结果的方式无效
}
改成这样就好了:
void fun(int * p1 , int * s)
{
* s = * p1 + * p1 ++ ; // s = p1 + p1
* (s + 1) = * p1 + * p1 ; // s = p1 + p1
}
就是说,我们应该修改参数指针所指向内存中的数据,而不是指针参数本身的数值。只有这样,才能把计算结果带出函数。 本帖最后由 两手空空儿 于 2022-10-12 15:41 编辑
局部变量只在函数内部有效,在函数fun(int *p1, int *s)内 , p1,s,t都是fun的局部变量,对p1【指向的值】进行了读取操作,对s和t进行了写入操作,这里只改写了S这个【变量的值】,对S原来指向的内存单元没有改动,所以对于数组a[]和b[]没有任何变化
如果 s = t, s = t 那么数组b[]内元素的值就有了变化。
页:
[1]