本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。
下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。
上一篇
从0开始学c语言-08-认识一下关键字、#define定义常量和宏_阿秋的阿秋不是阿秋的博客-CSDN博客
总结篇
从0开始学c语言-总结01-c语言的粗略认识和快捷键_阿秋的阿秋不是阿秋的博客-CSDN博客
目录
指针
先明白内存的储存方式
我们可以把内存理解为一个空间,而这个空间里住着很多数据。比如说你要找一个数据,如果没有它的编号或者地址就要一个个筛选,效率很低。
为了提高效率,我们把内存划分成了一个个内存单元,并且给每个单元进行了编号,也就是地址。
那么数据太多的话,如何进行编号便成了个问题。
这就需要联系到我们的计算机本身了,有的是32位系统,有的是64位系统。
我们需要知道的是32位系统——32根地址线——32根物理线——通电——1(正电)/0(负电)——会有多少个编号呢?
我们把电信号转换为数字信息:0和1组成的二进制序列,这就是编号的组成。
还有一个问题:一个内存单元有多大?
内存的空间有限,如果为了划分更细致的话,我们假设一个内存单元是1bit,那么1个char类型的数据就需要1个字节也就是8个bit——8个内存单元——8个地址。(不要以为一个内存单元对应一个数据,人家数据还分大小的,一套房子不够住!)
整个内存的大小也就是2的32次方个bit,换算等于0.5个gb,这实在是太小了!
所以我们把一个内存单元划分了一个字节的大小。
指针就是个变量,用来存放地址。
不同数据的地址怎么分配内存单元
int main()
{
int a = 9; //int类型的数据a单位大小是4个字节,占了4个内存单元
printf("%p\n", &a); //%p是打印地址的,&a是取a的地址
return 0;
}
现在教你怎么看地址
首先进行调试(fn+f10),然后这么点。
调出来这个窗口后,可以拖动到合适的位置,就像这样。
我们调成4,就可以看到a是怎么储存的了。
需要明确的是,我们在取地址的时候只取4个字节中第一个字节的地址,也就是最小的那个地址。
小白可能不懂地址怎么出来的,这些地址是32bit的二进制序列转换后的十六进制,联系一下我们之前讲的编号怎么编的,你就知道地址怎么来的了。
现在我们进行打印。
阿偶!地址怎么和上面的不一样呢?
这里就需要强调了:地址会变,因为有生命周期,每次创建再销毁,随机分配的。
把&去掉
我做了个新尝试,把&去掉,发现直接打印出来了a在内存单元中储存的样子。
这样打印会有警告,
不是很理解,但是很有趣。以后再探讨吧。
创建一个char类型的试试看
观察箭头和红色的地方。
可以看到,进行打印后,41(内存单元中储存的样子)是不会变的,而地址是会变的。
和int类型进行对比。
这里是红了4个内存单元。
和char类型结论一样,内存单元中储存的样子是不会变的,而地址是会变的。
代码中指针怎么用?
int main()
{
int a = 9;
int* qiu = &a;
*qiu = 778; //*qiu通过qiu的地址找到a,*是解引用操作符
printf("%d\n", a); //这输出的值便是通过*qiu来改变了a的值
printf("%d\n", qiu); //我们在定义的时候int*是代表一个整型指针变量类型的数据,所以用这个%d会警告,且打印出来是个随机值
printf("%d\n", *qiu); //这样打印就可以输出正常的数值
printf("%p\n", &a); //前两个地址不一样
printf("%p\n", &qiu);
printf("%p\n", &*qiu); //这个才是一样的地址
return 0;
}
仔细观察这些代码的不同之处。
那么事实证明qiu只是个指针变量名字,*qiu才是和a一样的。
计算一下各种指针的大小
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(long long*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*)); //和系统有关
return 0;
}
指针的大小取决于地址存储的需要。
(注意!!!!我这里图画错了,应该是qiu,qiu才是指针,那个存地址的指针)
总结
1.电信号转换为数字信息:0和1组成的二进制序列,这就是编号的组成。
2.指针就是个变量,用来存放地址。
3.只取4个字节中第一个字节的地址
4.地址会变,因为有生命周期,每次创建再销毁,随机分配的。
5.内存单元中储存的样子是不会变的,而地址是会变的。
6.qiu只是个指针变量名字,*qiu才是和a一样的。
7. 指针的大小取决于地址存储的需要。
下一篇
从0开始学c语言-10-结构体以及一些作业_阿秋的阿秋不是阿秋的博客-CSDN博客
总结篇