指针
要了解指针就要先了解内存的意义
内存 1.首先,内存是对于一个计算机而言极其重要的部分,计算机中所有应用的运行都在内存之中
2.为了有效的使用内存,我们将内存分为了一小部分,一小部分的空间,称为内存单元,一个内存单元占一个字节
3.为了有效的访问内存单元的每一个位置,我们给内存单元进行的编号,这些编号被称为内存单元的地址
关于指针 :指针其实本质上就是保存数据的意义,它所保存的的为内存的一个地址,所以指针完全可以当做一个整数来看待.
只不过这个整数的意义就是一个地址
变量都有相应的地址,而取出地址的方法如下
int p = 11;
&p;//此处的"&“就为取出p地址的意思
printf(”%p\n", &p);//取出地址后打印,此处的%p就是以地址的形式打印
system(“pause”);
return 0;
指针的使用实例(记住研究指针时一定要结合内存,更方便理解)
#include<stdio.h>
#include<windows.h>
int main()
{
int num = 10;//此处给这个变量进行赋值,也是给它分配了内存空间
int*p = #//int表明来了这个指针的类型为整形,也表明了这个指针所占的空间的大小,这一段代码我感觉更像是将指针与内存联系起来,表明了指针与变量的关系.p为指针的名称
*p = 20;//指针对应的位置
system(“pause”);
return 0;
}
对这段代码的理解(结合代码后面的注释来进行理解)
理解其实指针本质上也就是一块内存,这块内存不放别的东西,它只用来存放另一块内存的地址.所以可以这样理解,假如数据是一个盒子,那么内存就是这个盒子的盖子,而指针就是一个更大的盒子,它把这个小一点的盒子装在里面,但是它表示的是地址.
关于指针部分的一点理解
首先从内存的部分来进行理解
首先要理解内存的存储规律
因为每次要使用变量时我们都要先去声明它
比如
char c;
int I;
其实上声明的过程就是在内存中申请了一定的空间,便于一会在其内部存放数据,比如int i就是申请了4个空间,char c就是申请了两个空间
当我们给变量进行赋值时
c=‘t’;
i=“30”
其实就是将30存入i提前声明的空间之中,将t存入c提前声明的空间之中
接下来理解什么是&i
int i = 39;
char c = ‘t’;
printf("%d", &i);
可以看到其实&i就是取到了i在内存中的存储位置,但是因为内存的存储空间太大,所以这个存储位置也是随机的.
所以最后也可以总结一下
int i = 89;
printf("%d\n", i);
printf("%d\n", &i);
system(“pause”);
return 0;
(此处需要插入图片)
我们可以看到当你输出i时,是输出相应的值,当我们输出&i时,输出的为其在内存中保存的位置
然后让我们来讨论c语言与c++中的指针
int* pi;//其实pi并不是多么特别的东西,它甚至可以看做一个变量
关于pi=&i的理解
因为我们前面已经看过&i的意思,它其实就是取i的地址
所以这段代码就可以理解为,将i的地址的编号复制给pi(也可以理解为在pi上写上i的地址)
所以这里就可以理解为pi就是那个装内存的更大的盒子的标签
所以我们就可以通过pi这个指针来方位它盒子里存储数据的内容了
看下面语句
printf("%d",pi);
关于这个pi的意思,pi内部本身保存的就是其所对应的数据的地址,而*pi就表示的是(pi所保存地址所对应的数据的内容)
理解以下程序
#include<stdio.h>
#include<windows.h>
int main()
{
char a;
char *pa;
a = 10;
pa = &a;//将a的地址存放到pa这个指针当中
*pa = 20;//*pa就是访问了pa这个指针的内容所对应的地址,以及这个地址所指向的位置所对应的内容
printf("%d", a);
system(“pause”);
return 0;
}
(这儿需要插入图片)
(上述程序及其重要,需反复理解)
结构体的部分请看下一篇博客