求问C语言解析int *t; t=(int *)malloc(2 * sizeof(int)); *t=*p1+*p1++; *(t+1)=*p1+*p1; s=t;

#include <stdio.h>
#include <stdlib.h>
void fun(int *p1,int *s)
{
int *t;
t=(int *)malloc(2 * sizeof(int));
*t=*p1+*p1++;
*(t+1)=*p1+*p1;
s=t;
}
main()
{
int a[2]={1,2},b[2]={0};
fun(a,b);
printf("%d,%d\n",b[0],b[1]);
}

#include <stdio.h>
#include <stdlib.h>
//p1和s是指向整型变量的指针。
void fun(int *p1,int *s)
{
int *t;
//在堆中分配2个整型类型大小的存储空间,令t指向此空间的首地址。
t=(int *)malloc(2 * sizeof(int));
//令第1个整型空间存储p1指向的变量的值的两倍(当在下面的main函数中调用此函数时,p1指向数组a的首元素a[0],因此t指向的第1个整型空间存储的是a[0]的两倍2),并使p1指向下一个元素(对于下面的调用而言是指向a[1])。
*t=*p1+*p1++;
//令第2个整型空间存储p1指向的变量的值的两倍(对于下面的调用而言是a[1]的两倍4)。
*(t+1)=*p1+*p1;
//令s指向t指向的堆空间,s在下面的调用中本来是指向数组b的首元素b[0]的,这里的赋值并不会改变数组b的任何元素的值。
要将数组b的两元素的值改成2 4,可以这样:s[0]=t[0];s[1]=t[1];。
s=t;
}
main()
{
int a[2]={1,2},b[2]={0};
fun(a,b);
//输出0,0。因为上面的函数调用并没有改变数组b的任何元素的值。
printf("%d,%d\n",b[0],b[1]);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-15
输出0,0
也就是b[0] = 0;
b[1] = 0;
因为函数fun对指针s的修改无法返回到调用处,也就是b数组保持不变
第2个回答  2019-02-15
s=t 这句有问题,s就是b的值,也就是数组地址,而数组地址是常量,不能被赋值。
相似回答