扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你好
措美网站建设公司成都创新互联,措美网站设计制作,有大型网站制作公司丰富经验。已为措美近千家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的措美做网站的公司定做!
从问题来看,似乎你对于指针的概念没太理解。指针变量中存储的是内存中的地址,而实际的数据放在这个地址中。
按照这段代码来说,int* 声明的指针指向内存中的一块地址,而在这块地址中存储着一个整形数值。所以要返回这样的值,也就相当于是返回一个内存地址。因此,在程序中有两种具体的解决办法:
1.在调用函数的时候,直接将变量的指针(即内存地址)作为参数传入,在函数执行的时候,就会自动对内存中相应地址的数据进行操作。使用这种方法也就不需要返回值了。具体到这段代码中,就是在Main中声明int* tempA[10],把foo函数声明为void foo(int* a[10]),调用时用foo(tempA),在foo函数中直接使用a[10]即可。
2.直接把内存地址作为返回值,因为在C中,数组名就是数组首元素的指针,因此直接返回数组名就可以了,即return a即可。如果是普通变量,要用取内存地址的运算符,比如声明了整型变量 int i,就可以return i。这与printf函数中的使用方法是相通的。
【按照补充的内容:】
a--------a1--------i1
|--------a2--------i2
|……………………
|--------an--------im
这样的调用方法,只能保证a1-an不被修改,怎么保证i1-im不被修改?
希望以上回答能帮到你。【PS.很久没用C了,如果哪里出了差错,请指正。】
首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s
指针指向的地址里面的值与
t
指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。
第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return
返回回来并且存在
主函数的
r
中了,所以自然就不会释放了
这是个函数指针 前面的void为返回值类型 后面的void*为参数类型.
函数指针是可以作为某个函数的参数的.
(1) 指向函数的指针变量的一般定义形式为:
数据类型 (*指针变量名)(函数参数列表)
函数名是可以缺省的 作为参数传递的时候会去调和 void*(*)(void*)这个类型相匹配的函数的
作为参数调用这个函数的时候 返回类型是void* 就相当于传了一个参数类型为void*,当然这个函数指针的参数也是void*的
这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法
首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数
int
*fun(void)//这里是指针函数
{
int
*p
=
(int
*)
malloc
(int);//动态申请内存//p在这里指向了一块合法内存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
free(q);//释放动态内存
}
不知下列代码对你是否有用
记住:C中只有_值_传递!
#include conio.h
#include stdio.h
void fun(int **pp, int *i);
int main(void)
{
int *p, i;
i = 88;
fun(p, i);
printf("%d\n", *p);
getch();
return 0;
}
void fun(int **pp, int *i)
{
*pp = i;
}
或者
#include conio.h
#include stdio.h
#include stdlib.h
#define N 100
void getmemory(int **pp, int n);
int main(void)
{
int *p, i;
getmemory(p, N);
for (i = 0; i N; i++)
p[i] = i;
for (i = 0; i N; i++)
(i+1)%10 ? printf("%3d", p[i]) : printf("%3d\n", p[i]); /*输出0~99*/
getch();
return 0;
}
void getmemory(int **pp, int n)
{
*pp = (int *)malloc(n * sizeof(int));
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流