c语言——指针

————并不完善,会渐渐的补充————

目录

1指针是什么

2指针和指针类型

3野指针

4指针运算

5指针和数组

6二级指针

7指针数组

——————————————————————

8字符指针

9数组指针

10指针数组

11数组传参和指针传参

12函数指针

13函数指针数组

14指向函数指针数组的指针

15回调函数

16其他

17最后


1指针是什么

  • 指针是汇编语言中的一个对象,利用地址,指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单元,地址指向该变量单元。因此,将地址形象的称为指针。意思是通过它能找到以它为地址的内存单元。
int main() {
	int a = 10;//在内存中开辟一个空间
	int* p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符
	             //将a的地址存放到p变量中,p就是一个指针变量。int*表示定义p为整型指针。
	return 0;
}

 ==>指针就是变量,存放地址的变量。(存放在指针中的值当作地址处理)

(仿若别人可以根据门牌号(指针)找人(值))

  •  指针的大小是固定的4/8个字节(32位平台/64位平台)

2指针和指针类型

 指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。

int*p;  *p能够访问4个字节

char*p;  *p能够访问一个字节

double*p;  *p能够访问8个字节

指针类型决定了:指针走一步走多远(指针的步长),对应上边 

在指针加减整数的时候体现。

3野指针

 指针指向的位置不可知。

(1)三种情况

①指针未初始化

②指针越界访问

int main() {
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0;i < 11;i++) {
//当指针指向的范围超出数组arr的范围时,p就是野指针
		*(p++) = i;
	}
	return 0;
}

③指针指向的空间释放

int* text() {    //返回为指针,定义指针类型
	int a = 10;
	return &a;
}
int main() {
	int* p = text();   //在函数调用返回值后,变量a的地址被释放(可以理解为临时的)
	*p = 20;         //此时访问该空间,可能发生冲突
}

(2)如何规避野指针 

  • ①指针初始化

如:=NULL

  • ②小心指针越界
  • ③指针指向空间释放即使置NULL
  • ④指针使用之前检查有效性
if(p! = NULL)...

4指针运算

  • 指针 加减 整数
  • 指针 减 指针

得到的是中间的元素个数

  • 指针的运算关系

比较地址大小

5指针和数组

(1)数组名:一般为数组首元素的地址;只有在&数组名和sizeof(数组名)时,数组名表示的是整个数组。

(2)

int arr[10]={1,2,3,4,5,6,7,8,9,10};
int* p=arr;</
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黑的尾巴呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值