2025_1_31 C语言中关于数组和指针

1.数组作为指针传递

数组作为指针传递可以:

  • 加一个数
  • 减一个数
  • 两个指针相减
  • 自增
  • 自减
cpp 复制代码
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	printf("%d\n", arr[0] + 2);
	printf("%d\n", arr[2] - 2);
	printf("%d\n", arr[0] + arr[2]);
	int* p = &arr[0];
	int* q = &arr[2];
	printf("%d\n", q - p);//数组的指针可以相减,表示下标之差
	return 0;
}

2.*p++

*p++常被用于数组的遍历

他是先返回当前解引用的值,然后自增,指向下一个元素的地址。

cpp 复制代码
void traverse(int* arr, int len) {
	int* p = arr;

	while (p < arr + len) {
		printf("%d\n", *p++);
	}
}


int main(){
	int a[] = { 1,2,3,4,5,6,7 };
	traverse(a, 7);
	return 0;
}

3.指针作为返回值

指针作为返回值一般是高危操作 ,因为这个指针在函数内被创建,一旦函数被销毁,这个指针就成为了悬空指针,指向了被释放的内存区域。

所以要返回的指针最好被设置为静态的或者动态分配

cpp 复制代码
int* get_max_min(int* arr, int len) {
	int max = arr[0], min = arr[0];
	for (int i = 1; i < len; i++) {
		if (max < arr[i]) {
			max = arr[i];
		}
	}
	for (int i = 1; i < len; i++) {
		if (min > arr[i]) {
			min = arr[i];
		}
	}
	static int result[2];
	result[0] = max;
	result[1] = min;
	return result;
}
int main() {
	int arr[] = { 1,2,3,4 };
	int* result = get_max_min(arr, sizeof(arr) / sizeof(arr[0]));
	printf("%d %d", result[0], result[1]);
	return 0;
}
相关推荐
我笔记8 分钟前
.net4和core的差异与iis部署差异
java
白宇横流学长1 小时前
基于SpringBoot实现的垃圾分类管理系统
java·spring boot·后端
tang&2 小时前
【Python自动化测试】Selenium常用函数详解
开发语言·python·selenium
卜锦元3 小时前
Golang项目开发过程中好用的包整理归纳(附带不同包仓库地址)
开发语言·后端·golang
Tony Bai7 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
sali-tec7 小时前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
45288655上山打老虎8 小时前
C++完美转发
java·jvm·c++
Seven978 小时前
查找算法
java
hnlgzb8 小时前
安卓app开发,如何快速上手kotlin和compose的开发?
android·开发语言·kotlin
无敌最俊朗@8 小时前
STL-deque面试剖析(面试复习4)
开发语言