马上要开始做CUDA C programming的大作业了,所以抓紧时间复习了一下C语言中关于指针的问题。发现了两篇好文章,一篇来自http://blog.21ic.com/more.asp?id=15941,作者是guyepiaoyu。对指针的比喻非常恰当,读后如醍醐灌顶。
另一篇做了详细介绍http://topic.csdn.net/u/20080504/22/a02ec262-2a6f-4797-a248-233bdb975ca1.html。讲的非常细致。
其实指针没什么神秘的,就是一个变量,但和普通变量的区别在于,普通变量存的是实实在在的数值,和指针变量存的是数值的地址。通过指针变量所标识的地址,我们可以找到这个实际数值。
比如,我们声明一个整形指针变量:
(1)int * pi; pi是一个指针。(对于任何一个声明的指针,我们都应该思考一下几个方面,a) 这个指针的类型是什么?b)指针指向的类型是什么---当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待?c)该指针指向了哪里---指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区)pi指针的类型是int *, 指向类型是 int, 在32位系统中,一个整形数值在内存中占用4个字节。char类型长度为1个字节。注意:指针指向的内存区和指针单独占用的内存区是两个概念!
(2)pi=&i;把i地址的编号赋值给pi,也就是你在pi上写上i的地址编号。
(3)printf(“%d”,*pi);*pi表示pi内容所指的地址的内容,也就是说也就是说printf(“%d”,*pi);语句等价于printf( “%d”, i ) 。
1412

被折叠的 条评论
为什么被折叠?



