操作符是地址运算,获得变量的存储地址;而*则是间接访问操作符,与指针一起使用,用于访问指针所指向的值,也就是说通过地址访问地址处所存储的变量。
创新互联主营新密网站建设的网络公司,主营网站建设方案,成都app开发,新密h5小程序定制开发搭建,新密网站营销推广欢迎新密等地区企业咨询
举个例子:
有变量a
=
8,存储在地址0xFFA0处。
a,表示a存储的地址,为0xFFA0,
*(指向a的指针),表示a的值=8,这里括号内的“指向a的指针”其数值等于0xFFA0。
void
fun(char
*p);
//这里的形式参数p是一个指针,所以你要传进来的是个指针变量,也就是地址
void
main(void)
{
char
a=8;
fun(a);
//所以这里你需要计算出地址,然后传给p
}
你可以这样理解,fun()调用时相当于
char
*p=a;
void
main(void)
{
char
a
=
8;
char
*pa;
pa
=
a;
fun(pa);
}
这与上面的表达是等价的。
n = scanf("%d",n);
这一句有问题
1. scanf 函数是有返回值的,它的返回值可以分成三种情况
1) 正整数,表示正确输入参数的个数。
例如执行 scanf(“%d %d”, a, b);
如果用户输入”3 4”,可以正确输入,返回2(正确输入了两个变量);
如果用户输入”3,4”,可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入”,3 4”,返回0。
3) EOF,这是在 stdio.h 里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。
你这个输入一个返回值就是1,因此n也会一直等于一
函数定义时在函数名后的圆括号的参数叫“形式参数”,简称“形参”;调用该函数时在函数名后的圆括号内的参数叫“实际参数”,简称“实参”。
int
Add(
int
num1
,
int
num2)
/*
num1和num2为形参
*/
{
return
num1
+
num2;
}
void
main()
{
int
a,
b,
value
a
=
1;
b
=
3;
value
=
Add
(a,
b);
/*
a和b为实参
*/
printf("%d
+
%d
=
%d\n",
a,
b,
value);
}
在C语言中,所谓的“输入参数”就是指形参;当形参使用引用传递时,输入参数也可以当作输出参数。
GetNumber()没有形参,也就没有输入参数。至于该函数体内部的变量c及输入语句,只能算是该函数的局部变量及赋值语句而已。简单来说,函数有没有输入参数,只要看函数名的圆括号内是否有参数即可。
#include stdarg.h /* 必须头文件,定义了各种变参宏 */
void myprint (const char* format, ...)/* 和printf一样 */
{
va_list vlist;//va_list的长度没有办法单独算出来,只能从format格式列表中计算出,通常就是%的个数,或者显示地指出,比如下面一个例子
va_start(vlist, format);
int size = vprintf(format, vlist);
va_end(vlist);
}
void PrintFloats (int n, ...)/* 需要指定变参个数n */
{
int i;
double val;
printf ("Printing floats:");
va_list vl;
va_start(vl,n);
for (i=0;in;i++)
{
val=va_arg(vl,double);
printf (" [%.2f]",val);
}
va_end(vl);
printf ("\n");
}