对指针的理解
指针指向某一段内存。 不存在什么可以指向,什么不可以指向。
比如我想对主函数的某段内存在子函数中操作
#include <stdio.h>
/*
** 对某段内存的第一个位置赋值1
*/
void
Test( int *p )
{
*p = 1;
}
void
main ()
{
void Test( int *p );
int tray [10]; //或者int *tray = malloc( 10 *sizeof( int ) );
Test( tray );
printf( "%d\n", tray [0] );
}
//结果输出了1, 因为我的参数指向的是这段内存。
但反过来,如果在主函数中对子函数的某段内存操作,再这样执行就不行了。
比如:
void
main ()
{
void Test( int *p );
int *tray;
Test( tray );
tray [0] = 1;
printf( "%d\n", tray [0] );
}
/*
** 申请一段内存
*/
void
Test( int *p )
{
p = malloc( 10 * sizeof( int ) );
}
//结果,系统报错。
原因是 主函数中传递给子函数的是指针变量tray的内容,而形参p是一个局部变量,因此可以看作是变量tray的拷贝。 当子函数结束了,该形参会被销毁,即这个指向没有意义。