讲一下我对C语言指针入门过程
网上关于这个指针的讲解多的不能再多了……,多到已经不知道看哪个了
本人比较笨,也是积累了很长一段时间才对指针有所掌握,指针涉及到的内容也比较多,就讲一下我是如何入门的,一些简单的基础
开始时候我会对这两个符号有很大迷惑“*”、“&”,一会出现等号左边一会右边的搞晕了;
在C语言有这样的定义大家应该都明白,不多说就是指针的类型和指向的数据类型为相同数据类型,这个应该也都明白;
首先要讲一个重要的概念就是计算机内存,就是我们定义的变量、这些变量会被分配在内存的一个固定或动态的内存地址里面,然而这些地址都是被提前编上编号的。我们在程序中想使用这些变量时,一个是直接使用变量名称,另外一个就是直接使用这个内存的地址对应的变量;
那这个变量对应的地址就可以用指针替代;
讲到这里好像大家也都明白,地址不就是指针吗,那我直接使用变量名称岂不是更方便,这样说也没毛病,对于一个新手肯定是喜欢直接使用变量名称,开始我也这么认为的。
这样就矛盾了,既然可以用变量干嘛还要创造一个指针出来?这也是我当时非常纠结这个问题!!!
只能说当时太嫩了!!!
我要讲两个很重要的指针应用,一个是数组,一个是结构体,
为什么要讲这两个应用,因为书上明确指出这两种变在内存地址里面是连续分配地址的,到今天我依然认为因为只有连续内存分配使用指针才能发挥它最大的作用,
想一下,我们看到很多的案例在函数参数传递参数时很少看到传递一个数组,而是传递一个指针和这个数组的大小,是不是有点熟悉的感觉。
比如定义 int a[100];
再定义一个指针int *p_a=a; 这就代表了p_a指向了a[0];
当然还有另外一种写法就是int *p_a=&a[0];
这样的话我们有了这个指针就可以实现对数组完全使用权限,想读取哪个数据读取那个数据;
写到这里好像还是没有写到重点;
重点来了,比如我们要这这数组进行初始化,全部置0;
我们是不是要写一个循环从0~100,分别等于0;
还有一种办法就使用内存操作
memset(a, 0, sizeof(a)); //可能对于初学者还是有些懵逼,这个就需要你们自己消化了
那这个memset是做什么的,这个就要看一下c语言基础,c语言的标准库#include <string.h>
里面有很多关于内存的操作还有常用的memcpy内存拷贝
讲到这里我想讲的内容基本上差不多了
结构体的指针使用基本类似,也是对一块连续的内存的操作。
对于后面学习c++的类指针也是相似的概念
我们在学习指针操作和对内存的理解是分不开的,记得开始时候看书书上写到c语言的指针是一种不安全的存在,为什么这么说,因为知道了地址我可以对内存任何地址数据进行修改,这就是一个很危险的动作;想一想如果一台计算机上的软件没有任何防护控制导弹发射,如果有其他软件改写了内存的数据,很有可能会出现不可估计的后果;
若有不对的地方请指出……