码迷,mamicode.com
首页 > 编程语言 > 详细

C语言函数传参与指针

时间:2020-06-25 17:14:29      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:方式   oid   c语言函数   art   ini   例子   指针   amp   函数传参   

搬运自我的CSDN https://blog.csdn.net/u013213111/article/details/106732955

C语言的函数传参只有传值的方式,想要在函数中修改参数值的话就需要传入参数的地址也就是指向这个参数的指针了。
需要注意的情况是待修改的参数本身就是一个指针的时候,要传入这个指针本身的地址,也就是指向指针的指针。
看这样的一个例子:当希望用init函数对传入的指针int型ptr分配空间,init接受的参数是int **arr,是一个指向指针的指针,而调用init函数时,需要传入的参数是&ptr,也就是ptr的地址。

#include <stdio.h>
#include <stdlib.h>

int init(int **arr, int size)
{
	*arr = malloc(sizeof(int) * size);
	if (NULL == *arr) {
		printf("malloc failed\r\n");
		return 1;
	}

	printf("addr %x\r\n", *arr);
	int *pdata;
	pdata = *arr;
	for (int i = 0; i < size; i++) {
		//pdata[i] = i; //correct
		//(*arr)[i] = i; //correct
		//((*arr) + i) = i; //wrong
		//pdata = (*arr + i); //correct
		//*pdata = i;
		*(*arr + i) = i; //correct
	}
	return 0;
}

void deinit(int **arr)
{
	if (NULL != *arr) {
		printf("addr %x\r\n", *arr);
		free(*arr);
		*arr = NULL;
	}
}

int main(void)
{
	static int *ptr = NULL;
	int size = 4;

	if (0 == init(&ptr, size)) {
		printf("ptr addr %x\r\n", ptr);
		for (int i = 0; i < 4; i++) {
			printf("ptr val %d\r\n", ptr[i]);
		}
		deinit(&ptr);
	}	

	return 0;
}

C语言函数传参与指针

标签:方式   oid   c语言函数   art   ini   例子   指针   amp   函数传参   

原文地址:https://www.cnblogs.com/lyrich/p/13192141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!