scanf后面的参数,为什么要加上取地址的符号? 一般学习C语言学到第二天的时候,很多同学都会有这样的疑问。 这个问题等你学完了指针,应该就会很清晰。 scanf的作用是从标准输入缓冲区获得一个数据,放在对应的变量里面,假设我们获取的是一个整数。 如果不取地址,写法是这样的:
scanf("%d", num);num在这个地方叫做实参。 scanf的定义在C库中,而且还涉及可变参数,我们把它简化一下,假设函数的定义就是这样:
int scanf(char *f, int n) { // ... }这个地方的n叫做形参。 在内存里面,实参占 4 个字节,形参也占 4 个字节。 函数体里面要做的,就是从标准输入读取一个整数,放在 n 中。 那么问题来了,数据确实被放到了 n 里面,但是 num 没有任何变化,回到函数调用的地方,num 并没有变成我们想要的数据。 如果改成取地址,实参还是 num,但是形参变成了 num 的地址,指针 n 指向 num,在 scanf 函数里面,可以通过地址把获取到的数据放到 num 中。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !