栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

31天C语言——10,指针高级

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

31天C语言——10,指针高级

文章目录
  • 1,加减整数
  • 2,关系运算
  • 3,指针作差
  • 4,指针与数组
  • 5,多级指针

1,加减整数

指针加一,对于数组来说是索引加一。
因为是顺序存储的。

int a[]={1,2,3}
a:第一个元素的指针
a+1:第二个
a+2:第三个
*a:第一个元素的指针指向
*(a+1)
*(a+2)

#include 

int main() {
	int arr[] = {111, 222, 333};
	printf("%dn", *arr);
	printf("%dn", *(arr + 1));
	printf("%dn", *(arr + 2));
	return 0;
}

效果:

2,关系运算

对数组来说,后面元素的内存地址是逐渐变大的。
用关系运算可以更方便地遍历。

#include 

int main() {
	int arr[] = {111, 222, 333, 444, 555, 666};
	int len = sizeof arr / sizeof arr[0];
	for (int *p = arr; p < arr + len; p++) {
		printf("%dn", *p);
	}
	return 0;
}

效果:

3,指针作差

在数组中,比较两个元素的相对位置。

#include 

int main() {
	int arr[] = {111, 222, 333, 444, 555, 666};
	printf("%ldn", arr - (arr + 3));
	return 0;
}

效果:

有人说,这不是废话么,arr-arr-3就是-3呀。
雀食。。。

那我换一种写法。

#include 

int main() {
	int arr[] = {111, 222, 333, 444, 555, 666};
	printf("%ldn", &arr[0] - &arr[3]);
	return 0;
}

效果还是-3。


当我有同一数组内,任意两个指针时,由这种方法可以判断相对位置。

4,指针与数组

数组名是首个元素的指针。

#include 

int main() {
	int arr[] = {111, 222, 333, 444, 555, 666};
	printf("%dn", arr[0]);
	printf("%dn", *arr);
	printf("%dn", *&arr[0]);
	return 0;
}

效果:

5,多级指针

指针是类型,有指向地址。
那就有指针,指向指针。
那就。。。
有,更多层的套娃。

二级指针:指向指针的指针。

#include 

int main() {
	int a = 3;
	printf("%dn", a);
	int *b = &a;
	int **c = &b;
	**c = 7;
	printf("%dn", a);
	return 0;
}

效果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835047.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号