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;
}
相关推荐
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大2 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai2 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说2 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜2 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa2 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行2 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
Zane19943 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了3 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品3 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库