C/C++ 您当前所在位置:首页 > C/C++ > C语言指针探测(一)
C语言指针探测(一)
简介 指针在C中是一个至高点,如果指针没学好,那么C就相当于白学。我这里将学习笔记记录下来,一步一步了解指针到底是个什么东西,如何使用。
记录指针之前呢先说明一下,有人之前了解过指针,理解的指针就是地址,我想说我们先忘了它,忘了指针就是地址的事。下面记录开始。
声明
我们了解过char,short,int或者结构体等这些类型,我们现在要学习一个新的类型,这个新类型就可以在原来学的任何类型后面加一个“*”,我们以int类型来举例。
int main(int argc, char* argv[]) { int c; }
上面一行代码我们都知道,定义一个变量,我们可以在int后面加一个“*”号,变成int* c;,这个星号可以放在类型后面,也可以放在变量名前面,如
int main(int argc, char* argv[]) { //可以这样 int* c; //或者这样 int *c; }
这两种写法都一样,建议放在类型后面。
这个“*”是没有数量限制的,可以写一个、两个、三个。。。
int main(int argc, char* argv[]) { int* a; int** b; int*** c; int*********** x; }
如何赋值
int main(int argc, char* argv[]) { char* a; short* b; int* c; //赋值 a = (char*)10; b = (short*)20; c = (int*)30; }
这是完整的赋值方法,像平常我们给int赋值的时候,完整的赋值应该是x = (int)10;由于现在编译器比较智能,所以这个赋值可以简写,但带有“*”号类型的赋值是不能简写的,必须要用完整的写法。上面演示的是一个“*”的类型,如果定义的时候是两个“*”或者多个“*”,赋值的时候前面小括号里面的类型也要跟着变。
宽度探测
我们知道char、short、int这些类型在局部变量中编译器分配了四字节,有些类型并没有四字节,使用的时候也没有使用四字节,但确分配了四字节。那我们来看看带“*”的类型是如何分配的。
int main(int argc, char* argv[]) { char* a = (char*)1; short* b = (short*)2; int* c = (int*)3; return 0; }
看一下反汇编
00401078 mov dword ptr [ebp-4],1
0040107F mov dword ptr [ebp-8],2
00401086 mov dword ptr [ebp-0Ch],3
上面是加一个“*”,再试试加两个“*”
int main(int argc, char* argv[]) { char** a = (char**)1; short** b = (short**)2; int** c = (int**)3; return 0; }
再看看反汇编
00401078 mov dword ptr [ebp-4],1
0040107F mov dword ptr [ebp-8],2
00401086 mov dword ptr [ebp-0Ch],3
通过上面我们看出,不管原来什么类型,加了“*”以后,不管几个“*”,这个新类型宽度都是四字节。
++或--
int main(int argc, char* argv[]) { char* a = (char*)1; short* b = (short*)1; int* c = (int*)1; a++; b++; c++; printf("%d %d %d",a,b,c); return 0; }
运行上面程序打印出来的结果分别是2、3、5。再看。
int main(int argc, char* argv[]) { char** a = (char**)1; short** b = (short**)1; int** c = (int**)1; a++; b++; c++; printf("%d %d %d",a,b,c); return 0; }
这里三个结果都是5。因为带“*”类型加加减减计算公式为去掉一个“*”,计算剩余的类型的宽度是多少,是多少就加加或减减多少。第一个示例中类型带一个“*”,去掉一个“*”,所以剩下的类型宽度分别是1、2、4字节,加加后结果就是2、3、5。而第二个示例中是两个“*”的类型,去掉一个也还有一个,前面说过只要是带“*”的类型宽度都是4,所以第二个示例结果都是5。
减减和加加一样,就不记录了。
暂时先记录到这里吧。
上一篇: 关闭网站响应头中PHP版本信息
下一篇: C语言指针探测(二)
猜你喜欢
点击排行
热门推荐
随机展示
站点信息
- 上线时间:2020年05月30日
- 网站程序:自建框架
- 博客模板:今夕何夕
- 文章统计:43篇文章
- 评论统计:0条评论
- 留言统计:1条留言
- 统计数据:百度统计