对指针的一点理解
2015-06-10 10:41
218 查看
对指针的理解
指针指向某一段内存。 不存在什么可以指向,什么不可以指向。
比如我想对主函数的某段内存在子函数中操作
#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的拷贝。 当子函数结束了,该形参会被销毁,即这个指向没有意义。
对指针的理解
指针指向某一段内存。 不存在什么可以指向,什么不可以指向。
比如我想对主函数的某段内存在子函数中操作
#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的拷贝。 当子函数结束了,该形参会被销毁,即这个指向没有意义。
相关文章推荐
- 微信公众号申请、微信支付申请教程
- 第一阶段效绩评估
- Delphi 一些函数解释
- C#中yield return用法分析
- 逻辑架构和物理架构
- javascript 控制 table tr display block 显示模式
- WM_CTLCOLOR和OnCtlColor消息的用法
- [Leetcode]Word Break
- java如何获得JVM可能的总内存,最大内存,以及空闲内存?
- Android Intent Action 大全
- xcode armv6 armv7 armv7s arm64
- hbase+zookeeper集群搭建
- HTML5桌面通知
- 处理【Fatal error: Can't use function return value in write context 】的情况之《empty的解析》
- 微软100题(70)字符串的全排列
- MapReduce简述、工作流程及新旧API对比
- 八排序算法汇总
- Python 学习笔记3
- (三)SSO之CAS框架单点退出,退出到CAS登录界面
- [leetcode] Validate Binary Search Tree