C语言第八次课(指针;值传递;指针+1;指针对内存的解析;指针与const关键字;数组名;)

本文详细探讨了C语言中的指针概念,包括值传递、指针初始化、指针应用以及指针运算。通过示例解释了指针如何改变变量值,以及指针在内存解析中的作用。同时,文章阐述了数组名的特性,指出数组名在不同情境下等同于首元素地址,并讨论了指针与const关键字的结合使用,强调const仅限制写操作。此外,还介绍了指针加减运算与不同数据类型的内存对齐方式。
摘要由CSDN通过智能技术生成

C语言第八次课重点(指针;值传递;指针+1;指针对内存的解析;指针与const关键字;数组名;)

(1)回顾指针
交换a,b的值

#include<stdio.h>
void Swap_Int(int a, int b)//形参
{
	int tmp = a;//自定义函数名tmp
	a = b;
	b = tmp;
}
int main()
{
	int x = 10;  int y = 20;
	printf("x=%d y=%d /n,x,y");
	Swap_Int( x, y); // 实参
	printf("x=%d y=%d /n,x,y");
	return 0;
}

//形参的改变不会改变实参的值;单向传递从实参到形参。

值传递
在这里插入图片描述
指针的应用

在这里插入图片描述
//定义指针时未进行初始化:叫做“野指针”。赋空值int*p=NULL;叫做“空指针”。

在这里插入图片描述
例题:

#include<stdio.h>
void fun(int *p)
{
	int a = 200;
	*p = 100;
	p = &a;
}
int main()
{
	int x = 0;
	int* s = &x;
	fun(s);
	printf("%d %d\n", x, *s);
	return 0;
}

//打印 x=100 *s=100;
在这里插入图片描述
数组【】=type+num
只有在sizeof(ar)中 代表整个数组概念,其他情况下数组名退化成数组首元素的地址 ar等价于&ar【0】;

指针+1的影响
在这里插入图片描述
//整型指针+1 地址每次加4字节

在这里插入图片描述
//char类型指针+1,地址每次加1字节。

在这里插入图片描述
//double类型+1,地址每次加8字节。

在这里插入图片描述
//按类型大小sizeof()*1
在这里插入图片描述
例题:
在这里插入图片描述
在这里插入图片描述
指针的类型对指针有两个限制;
(1)限制指针+1的能力;
(2)限制指针对内存的解析能力;

指针对内存的解析能力:
在这里插入图片描述

在这里插入图片描述
//图为限制指针的内存解析能力并且指针不能相加只能相减。

指针减去指针得他们的元素个数
图为解析“指针-指针”:
在这里插入图片描述
总结:指针相减在这里插入图片描述

指针与const关键字
在这里插入图片描述
//const只封锁“写”的能力。
在这里插入图片描述

(2)数组名
在这里插入图片描述
//数组名被看做是数组第一个元素的首地址,只有在sizeof中被看做所占内存大小。

在这里插入图片描述
//ar[ i ];等价于*(ar+i);当i等于0时访问首元素;当i等于1时偏移访问下一个元素,以此类推。在汇编中称其为“畸变式访问形式”。

数组名的退化:在形参中定义数组退化成指针。时间效率空间效率高。

#include<stdio.h>
#include<typeinfo>
using namespace std;
void Print_Ar(int br[5])//形参中定义数组将退化为指针void Print_Ar(int*br)
{
	printf("%d \n", sizeof(br));
	printf("%d \n", typeid(br).name);
	int cr[5];
	printf("%d \n", sizeof(cr).name);
	printf("%d \n", typeid(cr).name);
}
int main()
{
	int ar[5] = { 12,23,34,45,56 };
	Print_Ar(ar);
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值