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;
}
相关推荐
m0_748240255 分钟前
Windows安装Rust环境(详细教程)
开发语言·windows·rust
fajianchen6 分钟前
图文并茂-jvm内存模型
java·jvm·算法
Hello.Reader6 分钟前
深入理解 Rust 模块中的路径与公开性:绝对路径、相对路径和 `pub` 的应用
开发语言·后端·rust
fly spider9 分钟前
wait/notify/join/设计模式
java·开发语言·设计模式
m0_7482548826 分钟前
Spring Boot框架知识总结(超详细)
java·spring boot·后端
极乐丶醉卧沙场1 小时前
获取程序运行目录 (jar运行目录)
java·后端·jar
有个名字好难啊1 小时前
C语言——深入理解指针(1)
c语言·开发语言
考研势在必行1 小时前
2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针
c语言·开发语言·链表
啄缘之间1 小时前
学习TCL脚本的几个步骤?
开发语言·windows·学习
西农小陈1 小时前
Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具(进阶版)
开发语言·图像处理·python·小程序·pycharm·pyqt·pillow