关于c语言的传参问题个人见解
来源:互联网 发布:深圳大数据研究院 编辑:程序博客网 时间:2024/06/05 00:51
第一次写博客 哈哈,兴奋。
今天突然发现虚拟机中突然发现一个小的测试例子 ,自己都不记得了,仔细研究了一下我发现我居然是做错了,好吧 c语言还是不扎实,不过关,虽然工作了一年了,唉;
这是一个关于函数传参并且考察指针操作的例子,直接上例子;
#include <stdio.h>
#define ULONG unsigned long
#define STATIC static
#define VOID void
#define IN
STATIC ULONG g_aulData[3] = {100, 200, 300};
VOID FuncB(IN ULONG *pulB)
{
*pulB += 1;
pulB += 1;
*pulB += 1;
return;
}
VOID FuncA(IN ULONG **ppulA)
{
**ppulA += 1;
*ppulA += 1;
**ppulA += 1;
FuncB(*ppulA);
return;
}
int main(int argc, const char *argv[])
{
ULONG *pulData = g_aulData;
FuncA(&pulData);
printf("%lu\r\n", *pulData);
return 0;
}
在函数FuncA中和函数FuncB中,关于指针的每一个操作的我还是可以理解的,main函数中,给FuncA传递的参数相当于&(数组名),也就是一个二级指针,再FuncA中的也是几个指针的基本操作:
**ppulA+=1 是把数组中第一个元素100+1变成101。
*ppulA+=1 是把*ppulA这个指针指向200,指针+1,指向数组的下一个元素;
**ppulA+1 是把数组中的第二个元素200+1变成201;
FuncB(*ppulA)中把*ppulA参数传给了函数FuncB,其实*ppulA现在指向的是数组的第二个元素201,因为FuncA第三个操作已经把数组第二个元素200改变为了201;
在函数B中的一些操作更加简单
*pulB += 1; 把数组中第2个元素201+1变成202;
pulB += 1; 指针指向数组第三个元素300;
*pulB += 1; 数组第三个元素300+变成301;
到现在你们猜main函数中printf("%lu\r\n", *pulData);这个语句会打印什么,如果你猜301,不好意思 ,你错了,如果你答202,那恭喜你,你答对了。
这里为什么是202 呢,其实在我们调用FuncB的时候,传进去的*ppulA这个参数,作用域是在FuncA中的,*ppulA所指向的内容是可以改变的,比如*pulB+=1,可以改变数组中201的值。但是如果对这个参数*ppulA本身进行操作导致参数*ppulA发生改变的时候,比如pulB+=1,指向数组中元素300;在函数FuncB其实pulB确实指向了300,但是对FuncA中传的*ppulA的值没有影响,在函数FuncA中*ppulA依旧指向数组第二个元素201.如果您还不明白您可以去别的地方好好了解一下函数的形参这个概念,个人能力所限,不能再更加详细的说明这个问题了 ,对不起大家。
例子是个好例子,讲解的水平太菜了,各位多包涵;
- 关于c语言的传参问题个人见解
- 个人对C语言字节对齐问题的一些见解
- 个人学习C语言的见解
- C语言左值右值的个人见解
- 关于C语言中 rand()函数的一些个人积累和见解z
- C语言的简单介绍与描述(个人见解)
- 关于ROS的个人见解
- 关于指针的个人见解
- 关于AIDL的个人见解
- 个人关于BaseServlet的见解
- 关于rem的个人见解
- 关于队列的个人见解
- C语言初学关于for循环的自己的见解
- C语言union类型和C语言 uchar类型的个人见解
- 关于项目管理的一些个人见解
- 关于 ARM 和 单片机的个人见解
- 关于UI的自己个人见解
- 关于驱动的一点个人见解
- 相对布局
- 简单的POP邮件客户端
- Android布局之线型布局
- leetcode537. Complex Number Multiplication
- 淘淘商城系列——使用solrj来测试索引库
- 关于c语言的传参问题个人见解
- MySQL优化原理
- 机器学习笔记一
- 常用控件Toggle-Switch-SeekBar-RatingBar
- JSONObject text must begin with '{' at character 1 of错误解决
- css绝对定位、相对定位和文档流的那些事(非本人)
- 真机调试出现 application installation failed 错误 解决方案
- EPERM: operation not permitted, symlink '../../'
- 每段时间Android开发10个知道(初级系列)-170606