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 分钟前
那用到动态代理,关键的特征又是什么呢
java·动态代理
玖玥拾2 分钟前
C/C++ 数据结构(三)链表核心算法
c语言·数据结构·c++·链表
都说名字长不会被发现4 分钟前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
摇滚侠4 分钟前
Maven 依赖范围
java·maven
AKA__Zas5 分钟前
芝士算法(滑动窗口片 2.0)
java·算法·leetcode·学习方法
keykey6.9 分钟前
逻辑回归:从回归到分类
开发语言·人工智能·机器学习
喵星人工作室12 分钟前
C++火影忍者1.1.8
开发语言·c++·游戏
shchojj12 分钟前
ChatGPT Prompt Engineering for Developers - Expanding
开发语言·python·prompt
凡人叶枫15 分钟前
Effective C++ 条款26:尽可能延后变量定义式的出现时间
linux·开发语言·c++·effective c++
problc18 分钟前
用 JavaScript 打开中国的版式文档:@sharp9/ofdjs 诞生记
开发语言·javascript·ecmascript