VC++中的指针问题

对于VC++中的指针一直是我弄不懂的玩意,拜托哪位兄弟帮我形象点解说一下:指针的初始化移动赋值定位,希望不要从网上随便搜索拷贝一些,我需要的是带有心得的解说.谢谢了,如果... 对于VC++中的指针一直是我弄不懂的玩意,拜托哪位兄弟帮我形象点解说一下:指针的初始化 移动 赋值 定位,希望不要从网上随便搜索拷贝一些,我需要的是带有心得的解说.谢谢了,如果满意的话,分还可以加. 展开
 我来答
dog0404
2011-11-21 · TA获得超过532个赞
知道小有建树答主
回答量:165
采纳率:100%
帮助的人:221万
展开全部
看到很多人问,我也试着说说,当是自己的回顾也好。
首先,什么是指针,其实它也就仅仅是语言的一种数据类型而已,就这点说跟int,char什么的没什么区别,既然是一种数据类型,那就肯定有它的类型了,而就是这点导致很多人觉得指针很难。。。
1.指针的类型由他定义时指向的数据类型决定,即 int * pInt 可简称 int指针, void *(*fun)(int ,int) 即一个特定函数的指针,只能指向 接受(int,int)参数,返回void *类型的指针,所以它的类型较多,hoho。
这也是为什么会出现多级指针,如 int **p的原因。
这也是用好指针的关键,首先你要清楚了它是什么类型的不是?

2.指针的内容: 存储在指针里的值指向存储地址,*p 取出指针指向地址的存储内容。
3.你说的指针的移动,所谓指针的移动,如*(p+n) 指针移动n个,究竟走了多远?其实这完全有第一点,即他的类型决定,它指向的类型数据长度是多大(bytes),那移动一下就走多少存储单元(bytes)。
例如。 char ch[][]; char **p = ch;
为什么要定义双重的? 那是因为如果定义 char *p = ch,假设能通过编译,那么p++移动多少?按第一级数组下标移动还是第二级?who knows...编译器当然不能让你通过,因为它也不知到怎么动这个指针了。
4.数组作为参数传递的问题。其实对大多数编译器来说(当然不能说全部。。。我也不知道几种。。。),数组作为参数,编译器是生成指针的。也就是说
fun( char ch[][10]) ... 其实传递的是 char **
5.本来想不到什么了,看了你问的赋值问题,还是那句话,跟int ,double一样,什么样的类型赋什么样的值...
总之。。。关键是弄明白它是什么类型吧。

最后看一个,前两天在网上看的:
这个定义不是噱头,有他的用处的
void ( *signal ( int sig, void (*func) (int) ) ) (int);
看明白了它的类型,自然知道怎么赋值了
汪好帅
2011-11-19 · TA获得超过2829个赞
知道大有可为答主
回答量:1177
采纳率:0%
帮助的人:1349万
展开全部
我觉得指针的用法,首先要记住一点,定义某个类型的指针之后,必须要时刻记住要给该类型的指针分配一个有效的对应类型的内存地址空间。才可以使用指针进行操作访问。
比如 int *p;定义完之后, p = new int[NUM];
指针的移动,指针的使用让程序效率大大的提高。但是没指好就很容易崩溃的。
对于指针的应用过程中,一般都要有一个头指针变量,来保存一个数据访问过程的头地址,和当前操作指针变量,用来对数据访问移动。很多类的应用中,一般都有头指针,当前指针,尾指针三个变量。
指针的应用的确是要小心潜修学习,和LZ一起进步
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8e21a85
2011-11-19
知道答主
回答量:44
采纳率:0%
帮助的人:21.4万
展开全部
指针是个十六进制数 给指针赋值是指让该内存
记住一句真理 地址即指针 谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式