黑马程序员技术交流社区

标题: 关于C语言的小问题 [打印本页]

作者: 2014571245    时间: 2014-4-2 22:22
标题: 关于C语言的小问题
本帖最后由 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;
}


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

作者: 沙洲冷    时间: 2014-4-2 22:33
这个输出结果为10,因为change函数以指针为参数,传进去的是变量a的地址,所以change函数内部*n = 10;语句其实就是修改变量a的值,所以输出结果为10.
作者: Freedam    时间: 2014-4-2 23:23
不清楚你是不理解这段代码还是不理解指针,所以先给你把代码注释一下。
#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.
作者: conpgy    时间: 2014-4-3 09:04
本帖最后由 conpgy 于 2014-4-3 19:54 编辑

&a中&是取地址符,因此&a就是得到变量a的地址。指针就是存储了一个地址。通过地址可以找到对应的内容。所以这里&a相当于一个指向a的指针。然后传递给change函数。
在change函数中。通过*n得到指针变量n存放地址,然后得到地址对应的数据,然后将10赋值给它。通过change(&a)调用后,将10赋值给a。
其实指针访问是一个间接访问。所谓间接。是通过中间一个中转站。即第一步先找到地址。就是指针变量里面的数据。这段数据是代表一个地址。第二步,根据这个地址,去取出这个地址里面的内容。
作者: 2014571245    时间: 2014-4-3 14:46
恩 ,涨姿势了,呵呵,谢谢各位大神!!!!1
作者: 江北土著    时间: 2014-4-29 20:40
输出为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.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2