重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
f(a); //调用函数f,q指向a数组的第1个位置即指向a[0]
创新互联自2013年起,是专业互联网技术服务公司,拥有项目网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元金城江做网站,已为上家服务,为金城江各地企业和个人服务,联系电话:028-86922220
i=0;[i=0]
i5成立开始循环:(*q)++;q指向的单元自加1,a数组[2,2,3,4,5]
i++;[i=1],i5成立继续循环:(*q)++;q指向的单元自加1,a数组[3,2,3,4,5]
i++;[i=2],i5成立继续循环:(*q)++;q指向的单元自加1,a数组[4,2,3,4,5]
i++;[i=3],i5成立继续循环:(*q)++;q指向的单元自加1,a数组[5,2,3,4,5]
i++;[i=4],i5成立继续循环:(*q)++;q指向的单元自加1,a数组[6,2,3,4,5]
i++;[i=5],i5不成立结束循环
输出a数组
注意q指针的内容一直没变,如果要变需要写成q++;而不是(*q)++;
1.当然可以,函数名即为函数指针,也是其地址。
只要定义一个函数指针(按照要调用的函数形式进行定义),将要调用的函数名赋予它,即可调用。
#include stdio.h
typedef void(*pfun)(int x); // 指针函数:指向void返回,带参数int参数的函数
void output(int x)
{
printf("x: %d\n", x);
}
int main()
{
pfun p = output; // 将output函数指针赋予p
p(10); // 通过函数指针调用函数
return 0;
}
你对函数调用和参数传递还不是很理解
1.首先函数调用的参数有形参和实参之分
swap(p,q);//p q为实参
void swap(int*a,int*b)//a b为形参
{int*t;
t=a;a=b;b=t;
}
2.指针变量名表示的是变量的值,这个值是其他变量的地址,而不是指针变量本身所在内存空间的地址
如:
int a;//定义整型变量,假设其地址为0xaaaaaaaa
int *p;//定义一个指针变量p,肯定要为其分配内存,假设为0xffffffff,还没初始化,里面的数据是不确定的。
p=a;//p表示的0xffffffff里面的数据,是a的地址,执行后0xffffffff里面的数据变成a的地址,即0xaaaaaaaa
*p=5;//往a里写入数据
3.形参跟实参是不同的变量,占用不同的内存空间
所以a b已经是两个跟p q不同的变量了。
只不过是值跟他们相等罢了。
就如int m,n;
m=n; 你能说m和n是同个变量么?
4.既然形参和实参是不同的变量,
t=a;a=b;b=t;
交换a b的值(交换存储在a b指针变量里的数据,这个数据是地址,变成a跟q指向同一个对象,b q指向同一个对象)不会影响到p q的值
int t;
t=*a;*a=*b;*b=t;//交换a b指针变量里的地址所指向的数据,这样才能交换。
根据参数类型以及函数实现的功能综合判断。
注意不能单单看是否为指针。
要传递类型为A的值,如果参数类型是A*,那么为传地址,反之,如果参数类型是A,那么是传值。
比如,要传递int型参数:
1 传值:
void func(int a);
2 传地址:
void func(int *a);
而传递char *型参数。
1 传值:
void func(char *a);
2 传地址:
void func(char **a);
同样是char *类型的参数,有可能是传值,也有可能是传地址。具体取决于函数实现功能。