关于指针的一点心得——20150603

今天,我首先想讲一下,关于指针,关于C语言的一点心得。

我接触的第一门编程语言就是C,那时候觉得指针特别难懂,关于它的用法脑子里很乱。直到学数据结构时,彻底的弄懂了它。


指针也是一个变量,既然是变量,那么他在内存里就会占用空间,占内存里面就会放数据,只不过他所放的数据是一个内存地址罢了。

我感觉想要弄懂这个指针应该从他所占的内从长度开始。

下面举一个简单的例子:

int a; 

char c;

int * pa = &a;

char* pc = &c;

这里pa和pc都是指针,但是它们所指向的类型不一样,pa指向的是int,而pc指向的char。

我们知道,char在系统中就是占用1个字节长度的,而int是占4个字节长度的。那么指向他们的指针所占的内存是多大呢?是不是pa大于pc呢?

答案是,不是的,他们的长度应该是一样长的。那么,为什么呢?

因为他们都是用来存一个地址的,比如在32位的系统中,他们所占内存的长度就是4个字节,因为32位系统的地址用4个字节就可以I表示了。所以无论指向哪一个内存地址,都可以放在这4个字节中。无论指向的内容是什么,类也好,char也罢,他们的首地址的长度就可以用4个字节表示。因此,任何指针所占的内存长度是一样的。

我们只要记住一点指针在内存里储存的就是一个内存地址,所以pa就是一个地址,pc也是一个地址。

既然他们是一个地址,那么在他们的前面加上 * (运算符名字不记得了,不好意思),就是取出相应地址中的内容。

如果赋值 a = 4 ,那么*p 就是4。

当然上面这种是最简单的,对于数组,例如:

char  c[2][3];

c是一个常指针,这里存放的就是一个地址,使整个二维数组的首地址,存在下面的关系成立。

c是真个的首地址,*c就是第一行的首地址,就是c[0],其实在不考虑类型的情况下,c与c[0所得结果是一样的。*(c+1)就是第二行的首地址,就是c[1]。

*(c+1)+2 就是 c[1]+2,就是&c[1][2];

当然*(*(c+1)+2)就是c[1][2];

通过上面的例子,对于指针应该有所理解了吧。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值