高分收藏!C语言初学者必看——内存与指针的指南

C语言是机器亲和的,也就是说,在大多数情况下,它是要去迁就机器的。如果想学迁就人的语言,可以去学PHP,Python,Go,Java等。

工具与原理

指针与内存都是c语言中的要点与难点

内存是一维线性排列的

我们来写一个简单的程序:

我们在函数中声明了3个变量,名字分别叫 a b c

我们打印一下这三个变量的地址,结果如下:

扫描二维码关注公众号,回复: 13162667 查看本文章

这三个地址都是0x开头,是16进制。

可以看出来,这三个数字逐渐减少,并且差值都为4. 也就是字长。

这当然不是偶然,c语言是故意设计成这个样子的。

如下的图可以直观的表述:

指针的基本用法(初识指针)

main0.c:

上述代码无法实现a,b数值的交换。

改为指针类型实现代码如下:

main1.c:

为原来的变量值加上*, change函数改为传入&a &b

3和5可以成功的交换。

int* a 与 int *a都是可以的,被称为指针。& 取地址符。

我们要引入工具来分析

需要将实参的地址传到子函数才能改变实参! 如change(&a,&b)

C语言中int未初始化时,初值为随机

int变量未初始化的默认初值,和变量的类型有关

局部变量,在未初始化情况下,初值为随机值。C规范对该初值并没有做规定,具体实现由编译器决定。如VC/VS等编译器,会将初始值值为0xCCCCCCCC,而GCC等编译器则是不可预知的随机值。

静态局部变量,即带static修饰的局部变量。全局变量和静态全局变量,即定义在函数外,不属于任何一个函数的变量。这几种默认初值为0.


常见问题解答:

◆ 为什么打印地址时,我的打印结果跟上面不一样?同一个代码每次执行,地址的打印结果也不一样

因为每次代码运行过程中,变量的创建都要重新申请内存空间,每次申请的空间是『临时』的,创建时申请空间,使用完自动释放空间


感谢小伙伴的阅读,如果有不错的建议或意见,欢迎在评论区留言,喜欢的话,麻烦点个赞和关注哦~~~

猜你喜欢

转载自blog.csdn.net/weixin_58045538/article/details/116748538