A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2014571245 中级黑马   /  2014-4-2 22:22  /  1539 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 2014571245 于 2014-4-30 22:17 编辑

#include <stdio.h>
void change(int *n);
int main()
{
    int a = 90;
   
    change(&a);
   
    printf("%d\n", a);
   
    return 0;
}
void change(int *n)
{
    *n = 10;
}


哪位大神能给我解释下,这个题看的我好郁闷,指针太难了!!!!!!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
这个输出结果为10,因为change函数以指针为参数,传进去的是变量a的地址,所以change函数内部*n = 10;语句其实就是修改变量a的值,所以输出结果为10.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
不清楚你是不理解这段代码还是不理解指针,所以先给你把代码注释一下。
#include <stdio.h>
void change(int *n); //函数说明
int main()
{
    int a = 90;  //定义了一个整型变量
   
    change(&a); //调用函数change传入a的指针。
   
    printf("%d\n", a); //打印变量a的值
   
    return 0;
}
void change(int *n) //函数接收一个整型的指针
{
    *n = 10; //把传入的指针对应的变量的值赋值成10
}
这段代码主要是看a的输出值是多少。
change函数有一个参数是(int *n),也就是一个指针变量。
change(&a)这句是把a的地址传入到函数中,不知道你是不是理解不了这个。
将a的地址传入函数void change(int *n)中后,n = &a,n变量里存的是a变量的地址而不是变量的值,所以*n的意义就是a变量的值 你也可以打印一下看看printf(“%d”,*n);的值是90. 然后 *n=10;就是将a的变量的值修改了。因为原来是90,现在执行*n=10之后就变成10了。最后printf输出a的值为10.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 conpgy 于 2014-4-3 19:54 编辑

&a中&是取地址符,因此&a就是得到变量a的地址。指针就是存储了一个地址。通过地址可以找到对应的内容。所以这里&a相当于一个指向a的指针。然后传递给change函数。
在change函数中。通过*n得到指针变量n存放地址,然后得到地址对应的数据,然后将10赋值给它。通过change(&a)调用后,将10赋值给a。
其实指针访问是一个间接访问。所谓间接。是通过中间一个中转站。即第一步先找到地址。就是指针变量里面的数据。这段数据是代表一个地址。第二步,根据这个地址,去取出这个地址里面的内容。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
恩 ,涨姿势了,呵呵,谢谢各位大神!!!!1
回复 使用道具 举报
输出为10,change函数参数是(int *n),也就是一个指针变量。
change(&a)这句是把a的地址传入到函数中,将a的地址传入函数void change(int *n)中后,n = &a,将a的地址里的值赋值给变量n,所以*n的意义就是a变量的值 你也可以打印一下看看printf(“%d”,*n);的值是90. 然后 *n=10;就是将a的变量的值修改了。因为原来是90,现在执行*n=10之后就变成10了。最后printf输出a的值为10.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马