C语言指针作为函数参数传递学习(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33706673/article/details/84669784

1. 一维指针做函数参数

传入的指针为NULL

比如下面的例子,很多人都会理解错:

#include <stdio.h>

void test(char *string)
{
	string = "hello world";
}
int main()
{
	char *str = NULL;
	test(str);
	printf("str=%s\n",str);
	
	return 0;
	
}

是不是觉得输出应该是:str=hello world.事实上并不是
输出结果是(操作系统:win10):
在这里插入图片描述
具体过程如下:
在这里插入图片描述
开始str指针指向NULL,并将该地址作为形参传入函数test(),最开始string指针也是指向NULL,接着讲“hello world”地址传给了string,此时string的指针不再指向NULL,而是指向“hello world”这个字符串的地址。为了验证这个,可以在代码里加一些打印信息验证:

#include <stdio.h>

void test(char *string)
{
	printf("string未操作之前的的指针:%p\n",string);
	string = "hello world";
	printf("string未操作之后的的指针:%p\n",string);
}
int main()
{
	char *str = NULL;
	printf("传入test函数之前str的指针:%p\n",str);
	test(str);
	printf("str=%s\n",str);

	getchar();
	return 0;
	
}

结果:
在这里插入图片描述

2.那要实现在test函数中改变str的指针指向地址怎么办?

2.1 返回string指针,这个很好理解

#include <stdio.h>

char *test(char *string)
{
	string = "hello world";
	return string;
}
int main()
{
	char *str = NULL;
	str = test(str);
	printf("str=%s\n",str);

	getchar();
	return 0;
}

结果:
在这里插入图片描述
2.2 用二维指针

#include <stdio.h>

void test(char **string)
{
	*string = "hello world";
}
int main()
{
	char *str = NULL;
	test(&str);
	printf("str=%s\n",str);

	getchar();
	return 0;
}

结果:
在这里插入图片描述
具体分析如下图:
在这里插入图片描述
过程:
1.定义一个字符串指针str,str本身的地址是100,值为0(即NULL,一般的编译器NULL的地址是0)。
2.取str的地址100传给string,此时string的值是100,地址为200
3.这里假设“hello world”字符串的地址是300,接下来就是改变一级指针指向的内容的地址,由0变成300。

猜你喜欢

转载自blog.csdn.net/qq_33706673/article/details/84669784