想问问这题答案为什么是1而不是11?

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <stdlib.h>

void fun(int *p1,int *p2,int *s)

{

s=(int*)malloc(sizeof(int));

*s=*p1+(*p2++);

}


main()

{

int a[2]={1,2},b[2]={10,20},*s=a;

fun(a,b,s);

printf("%d\n",*s);

getch();

}

福工刘德华
浏览 2081回答 4
4回答

MinRam

逐行分析如下:初始化,指针s指向 数组a的首地址;fun调用中,查看fun的定义,为传值赋给参数。故此处p1指向数组a的首地址,p2指向数组b的首地址,(fun的局部变量)指针s指向a的首地址通过malloc,s被重新重新赋值新的内存地址,即s指向新的位置(fun的局部变量)指针s指向的位置,存入 对应的值;在main中的指针s仍指向数组a的首地址,故打印s指向的值,1

慕的地8582982

BXQAQSWZYMYWGIYYHOIIVCNTWFDNMIKRHVUXAKQNJIZMTZWGZJHKZJDGVSHHRBSHRYPLQAXHPFEUOTCQQNNRFEFZMPSUYANVUHAKDEHARQNGGQONTQMWPMBELHKJZZPQWSCWVBOHRSVBRULSRPEGATJSTJWVFMDGKODRVPWQJOFYCBWGYRAYOXLEMSPPMWVWVLIRCAAJCHRUYFIMYBNNKNNIGJMZYQAAKKKEXJMMSBHHXXKTTFNBVPPPMIPIJTFSPVIYZEEOKMXXNANBAFIODUAGQMPVIVPCCNNTWFVJMCPNAQJCQZTAOJDQTGTTERIWTVJTSUXGZNUATWMSSZYCTAMCCFVBHKENVHJDRYMKJTDNGFICKTTMZGBAEQAANJIMWYUUFTTGFBCFDJVCNGFKJLOUSRZWISOYUYLFVOEQJAPNDJTPJPZIBCQTTVFRRIBEUUKEAQGGNNUJASYFLSSIVBAXERQDGAHLYOUOZWFXXOAINFYLBYOSIYLSZTKTTDDGAWFPZURNNNDJWVLVZCIAJTNTJNGVIYLFSYIBZJJWCCLSMSROOBUHAUUXKDHGIRNDNKCVYLVMFZSXGDQFAPRKJZGGMZTAHRDWZJGVYOSZHVOEORORROHNBDBBUXNZYYYBRRHGNGPMGQNNNEXQNSURPCJFFIBSZQQQFIITWMSRENWYOEEEYKNQXFWZZJWRUAABXXQHLOKKKQNRISOFINQPMSMEOHFYSVUICYUATTDQOGAGGZSIIUUTPTQEAMGSJYDMWHTHRAKKGXHRIXGCFGQDQIARSBRRBRUKBSPAACTPKOFYRLERUUXRHAJZGOFUMYCYIRLYFOERBDQKBYOKDKKOFYWLPPNGFFZIJGLREZPKANXBUQAE

Stardust1001

fun()函数里面的*s=*p1+(*p2++);这一句里面,用的是*s,而不是s,s是个指针,*s不是指针,所以fun()函数里面更改*s不会影响main()里的s,也就不会影响main()里的*s
打开App,查看更多内容
随时随地看视频慕课网APP