C语言笔记14 •指针1•

指针1

        在C语言中给内存单元的编号起了个名字叫做指针,通俗来说就是地址。(内存单元编号=地址=指针

1.指针变量与地址

int a=10; 

int* p=&a;

  *  说明了这里p的是指针变量;int*说明p是一个整形指针;int说明p指向的对象a是一个整形;&a是取出a的地址; 总的来说就是取出a的地址存放在p里。

2.解引用操作符 *

*和指针变量搭配起来就是解引用,就是取出指针变量里的数值。

int a=10;int* p=&a;int b=*p;→ b=10      用一张图描述如下

3.指针变量的大小

指针变量的⼤⼩取决于地址的⼤⼩
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)

即不管是指针类型是char*、short*、int*  、double * 32位平台下大小为4Byte,64位平台下大小为8Byte

4.指针+-整数

比如: char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。这就是指针变量的类型差异带来的变化。指针+1,其实跳过1个指针指向的元素。指针-1也是如此,只是相反,向后退。

结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)
ps:指针-指针表示获取两个地址之间的元素个数。
5.const修饰指针变量
int * p;//没有const修饰
int const * p;或const int * p;//const 放在*的左边做修饰  p的地址可以修改,存放的内容不可以修改
int * const p;//const 放在*的右边做修饰  p的内容可以修改,存放的地址不可以修改
int const * const p;//const 放在*的两边做修饰  p的内容和地址都不可以修改
总结:
• const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
但是指针变量本⾝的内容可变。
• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。
• const 放在*的两边做修饰,修饰的是指针变量本⾝和针指向的内容,保证内容和地址都不可以修改。
6.野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
//野指针形成的原因:
#include <stdio.h>
//1.指针没有初始化
int main1()
{
	int* p;//局部变量指针未初始化,默认为随机值
	* p = 20;
	return 0;
}
//2.指针越界访问
int main2()
{
	int arr[10] = { 0 };
	int* p = &arr[0];
	int i = 0;
	for (i = 0; i <= 11; i++)
	{
		//当指针指向的范围超出数组arr的范围时,p就是野指针
	 * (p++) = i;
	}
	return 0;
}
//3.指针指向的空间释放
int* test()
{
	 int n = 100;
	 return &n;
 }
int main()
 {
	int* p = test();
	printf("%d\n", *p);//test()中n是一个局部变量,使用完之后n变量申请的空间就会被释放
	return 0;
 }

ps:指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性 →指针变量=NULL

7.传值调⽤和传址调⽤

见之前写的博客C语言笔记8-CSDN博客

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言是一种广泛应用于软件开发的编程语言,具有简洁、高效、灵活等特点。为了更好地学习和掌握C语言,整理一份完整的笔记是非常有必要的。 首先,C语言的基础知识是理解和掌握该语言的关键。笔记中应包含C语言的基本语法,如变量的声明和定义、数据类型、运算符、控制语句等,这些是编写C程序的基础。 其次,C语言的函数也是非常重要的一部分。函数是C语言中的一种模块化的编程方式,可以提高代码的重用性和可维护性。在笔记中应包含函数的定义和调用、参数传递、函数返回值等内容,以及常用的C库函数的使用。 此外,C语言的数组和指针也是需要重点关注的内容。数组是一种存储多个相同类型数据的方式,而指针则是C语言中与内存地址相关的操作。在笔记中应包含数组的定义和初始化、多维数组的使用、指针的声明和运算等内容。 还有,C语言中的内存管理是需要特别注意的。动态内存分配是C语言的一个重要特性,可以根据需要在运行时分配和释放内存。笔记中应包括动态内存分配的函数,如malloc、free等,以及内存泄漏和内存溢出的问题的解决方法。 最后,C语言的文件操作也是需要掌握的一部分。文件操作是C语言中与磁盘文件进行读写的关键部分,可以实现数据的长久保存和共享。在笔记中应涵盖文件的打开和关闭、读取和写入、文件指针的操作等内容。 综上所述,C语言笔记的完整版应该包含C语言的基础知识、函数、数组和指针、内存管理以及文件操作等内容。通过阅读和整理笔记,可以更好地理解和应用C语言,提高程序编写的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值