资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C语言指针笔记(自用)-创新互联

指针就是地址,地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和和指针变量是两个不同的概念
但是要注意:通常我们叙述时会把指针变量称为指针,实际他们含义并不一样

创新互联是一家专注于成都网站制作、成都网站设计与策划设计,仪征网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:仪征等地区。仪征做网站价格咨询:18982081108

指针的重要性:
表示一些复杂的数据结构
快速的传递数据
使函数返回一个以上的值
能直接访问硬件
能够方便的处理字符串
是理解面向对象语言中引用的基础
总结:指针是C语言的灵魂

指针的定义
地址:内存单元的编号;从零开始的非负整数;本质就是一个操作受限的非负整数

常见错误
在这里插入图片描述

附注:
的含义:1. 乘法;2. 定义指针变量;3. 指针运算符:该运算符放在已经定义好的指针变量的前边,如果p是一个已经定义好的指针变量,则p表示以p的内容为地址的变量
*p表示以p的内容为地址的变量
如何通过被调函数修改主调函数普通变量的值
1.实参必须为该普通变量的值
2.形参必须为指针变量
3.在被调函数中通过 *形参名= 的方式就可以修改主调函数相关变量的值

  1. 指针和数组
    指针和一维数组
    一维数组名是个指针常量,他存放的是一维数组第一个元素的地址
    在这里插入图片描述

    	下表和指针的关系
    				如果p是指针,则p[i] 永远等价于 *(p+i)
    				
    				如果一个函数要处理一个一维数组【如果一个函数要处理一个一维数组则需要接收该数组那些信息】![在这里插入图片描述](https://img-blog.csdnimg.cn/16a633fc53ba4474915f64abb208d048.png)

在这里插入图片描述

		指针变量的运算
				指针变量不能想加 相乘 也不能相处 只能相减
				如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才能相减

在这里插入图片描述
一个指针变量到底占几个字节
sizeof(数据类型)
功能:返回值就是该数据类型所占的字节数

	假设p指向char类型变量(1个字节)
			假设q指向int类型变量(4个字节)
			假设r指向double类型变量(8个字节)
			总结:一个指针变量,无论他指向的变量几个字节,该指针变量只占四个字节;一个变量的地址使用该变量首字节的地址来表示

		指针和二维数组
  1. 指针和函数
  2. 指针和结构体
  3. 多级指针

专题:
动态内存分配
传统数组的缺点:
1.数组长度必须事先且只能是长整数,不能是变量
例子:int a[5];
2.传统形式定义的数组,该数组的内存程序员无法手动释放;数组一旦定义,系统就会为该数组分配存储空间就会一直存在,除非数组所在的函数运行结束
3.数组的长度一但能定义,其长度就不能更改
数组的长度不能在函数运行的过程中动态的扩充或缩小
4.A函数定义的数组,在A函数运行期间可以被其他函数使用,但A函数运行完毕之后,A函数中的数组将无法在其他函数使用在这里插入图片描述

为什么需要动态分配内存:
		动态数组很好的解决了传统数组的这4个缺陷,而且传统数组也叫静态数组
	动态分配举例 动态分组的构造:

在这里插入图片描述

在这里插入图片描述

静态内存和动态内存的比较:
		静态内存是由系统自动分配,由系统自动释放
		静态内存是在栈分配的
	跨函数使用内存问题
#includeint main(void)
{int * p;//p是变量的名字,int*表示p变量存放的是int类型变量的地址
	 		//p变量的数据类型是int*类型,int*类型就是存放int变量地址的类型
	int i = 3;
	p = &i;//OK  把i的地址赋给p,p保存了i的地址,因此p指向i,*p = i
	            //p不是i,i也不是p,更准确的说,修改p的值不影响i的值,修改i的值也不影响p
	            //如果一个指针变量指向了某个普通变量则*指针变量就完全等同于普通变量
	p = i ;//error 因为类型不一致,p只能存放int类型的地址,不能存放int类型的值 
	p = 55;//error,原因同上 
	return 0;
}

eg:如果p是个指针变量,并且存放了普通变量i的地址,则p指向了普通变量i
p 就完全等同于 i
或者说:在所有出现
p的地方都可以替换成i;
在所有出现i的地方都可以替换成*p
*p就是以p的内容为地址的变量

//经典指针程序_互换两个数字
#includevoid huhuan (int *p, int *q)
{int t; //如果要互换*p和*q的值,则t必须定义成int,不能定义成int*
	t = *p; //p是int*,*p是int 
	*p = *q;
	*q = t;
	return;
}
int main (void)
{int a = 3;
	int b = 5;
	
	huhuan( &a, &b);	
	printf("a = %d, b = %d\n",a,b);
	return 0;
	
}
#includeint main(void)
{int * p;
	int i = 5;
	char ch = 'A';
	
	p = &i;//*p 以p的内容为地址的变量 
	
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:C语言指针笔记(自用)-创新互联
路径分享:http://cdkjz.cn/article/dhjjpj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220