赞
踩
- void main()
- {
- int a = 1;
- char b = 'a';
- int* i = &a;//指向一个int值变量
- char* c = &b;//指向一个char值变量
- }
二、指针P与指针P+1
- void main()
- {
- int a[] = {1,2,3,4};
- int* b = (int*)&a;
- }
在上面的程序中定义一个int类型的指针(在这里要重点强调一下,这里是int类型的指针,对后面的内容的理解很重要),指针b的地址为0x0018ff38,指针b+1的地址为0x008ff3c,他们中间相隔了4byte,刚好是一个int类型的大小,而指针b又是一个int类型的指针,所以我们可以得出一个结论:
指针P+1 = 指针P + sizeof(指针的类型) * 1
三、数组和指针(刚好看到上面程序结果想到的一个点)
在上面的运行结果中,我们可以发现a[1]和*(p+1)得到的值是一样的,因为&a[1]指向的地址和P+1指向的地址是一致。
在C语言中获得数组的值有两种方法:
第一种:匿名方法 --> a[1]
第二种:具名+匿名方法 --> P + sizeof(数组类型)*1
四、*(P+1)和*P+1的不同之处
- void main()
- {
- int a[] = {1,4,3,4};
- int* p = (int*)&a;
- }
五、*(P+1)和P[1]
也是用上面的程序,我直接上运行结果,一看就知道了
这大概是写法不同把,我个人的理解应该是跟上面第三点的两种取值方法原理相似。我做了以下的尝试
- void main()
- {
- int a[] = {1,4,3,4};
- }
到这里,最后一个&P[0]的含义就很明显了,可以看成取数组第一元素的地址。
文章很多地址均为本人用例子尝试后得到的结论,可能不是很正确,如果您发现有错误的地方,请在评论中指出,以免误导其它人,本人不胜感激。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。