今天遇到一个问题,即在C/C++中,关于在函数里对指针赋值的问题。首先可以看到如下现象:

void test(int *p)
{
p = NULL;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); int *t , y = 10;
t = &y;
test(t); return a.exec();
}

  

  这个结果令我有点吃惊,我一直以为传递指针,赋值完这个指针也会变的,没想到其实指针也是一个变量,我们如果要改变它,必须找到它在内存中的地址,也就是指针的地址。也就是说,对于函数中,如果对指针的地址进行赋值,事实上是改变不了原指针的!

void test(int **p)
{
*p = NULL;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); int *t , y = 10;
t = &y;
test(&t); return a.exec();
}

  

另外,用引用赋值也可以解决这个问题:

void test(int &p)
{
int n = 9;
p = n;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); int t , y = 10;
t = y;
test(t); return a.exec();
}

  

  另外,可以修改指针指向的内容,而不是修改指针地址,也可以改变内容。

  例子1:

void test(int *p)
{
int n = 9;
*p = n;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); int *t , y = 10;
t = &y;
test(t); return a.exec();
}

  

  例子2:

void test(int *p)
{
int n = 9;
*p = n;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); int t , y = 10;
t = y;
test(&t); return a.exec();
}

  

C/C++指针参数赋值问题的更多相关文章

  1. delphi使用SQL的教程4(使用Params属性为参数赋值 )

    17.4.1 使用Params属性为参数赋值   TQuery部件具有一个Params属性,它们在设计时不可用,在程序运行过程中可用,并且是动态建立的,当为TQuery部件编写动态SQL 语句时, D ...

  2. Atitit dsl对于数组的处理以及main函数的参数赋值

    Atitit dsl对于数组的处理以及main函数的参数赋值 1.1. 词法解析..添加了[] 方括号的解析支持1 1.2. Ast建立.添加了数组参数的支持..使用了递归下降法..getparam ...

  3. C#.Net 调用方法,给参数赋值的一种技巧

    C#中可以给参数赋值默认值(其实这种写法有点不太好,有时会使方法的功能太复杂了)。 但是往往有多个默认参数时,有的参数需要使用默认值,有的不使用默认值,这时正常的写法就行不通了,解决方法可参照下边的代 ...

  4. 利用“参数赋值”防范SQL注入漏洞攻击

    <<年轻,无权享受>————送给每一个看到此文的同僚们 在这无精打采的炎夏 我躺在阳台上房东的旧沙发 回想几个月来遇到的问题 我不禁内心开始慌张喘着粗气 还有大把时间去打拼 没有到只 ...

  5. 指针参数的传递(节选 C++/C 高质量编程 林锐)

    指针参数是如何传递内存的 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是 ...

  6. 【c++】指针参数是如何传递内存的

    [c++]指针参数是如何传递内存的   如果函数的参数是一个指针,不要指望用该指针去动态申请内存.如下: void GetMemory(char *p, int num) { p = (char *) ...

  7. Oracle中使用PL/SQL如何定义参数、参数赋值、输出参数和 if 判断

    1.pl/sql如何定义参数 declare --1)定义参数 -- ban_Id number; ban_Name ); 2.pl/sql如何参数赋值 --2)参数赋值-- ban_Id :; ba ...

  8. php 直接获取url参数赋值成变量。省去繁琐的获取参数,再一个个赋值

    php 直接获取url参数赋值成变量.省去繁琐的获取参数,再一个个赋值 parse_url() 该函数可以解析 URL,返回其组成部分.它的用法如下: array parse_url(string $ ...

  9. 【转】【c++】指针参数是如何传递内存的

    参数策略 如果函数的参数是一个指针,不要指望用该指针去动态申请内存.如下: void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(c ...

随机推荐

  1. SpringBoot整合MyBatis(注解版)

    详情可以参考Mybatis官方文档 http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/ (1). ...

  2. Sql Server 2008 数据库18456错误怎么解决?

    可以windows连接,以前都可以,昨天突然就不可以用SQL连接,报18456错误. 1.以windows验证模式进入数据库管理器. 2.右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码( ...

  3. ProcessHacker可编译版本

    说明 做一个批量进程内搜索字符串的工具. 试了processhacker-2.39-src.zip. https://sourceforge.net/projects/processhacker/fi ...

  4. ubuntu cron 及 crontab 自动执行任务

    Add the below line (with tweaks) to the end of /etc/crontab: 30 23 * * * root shutdown -h now At 23: ...

  5. 简单解决“ORA-27100: shared memory realm already exists”的问题

    背景 看到这篇文章,算是当初记录过程的一篇了,不像别的,只是有个结果算火.只是感觉到现在可能是碰不见这个问题了,现在哪有32位的oracle啊.可见技术随着岁月的变化,真不知10年后再看今天的问题,可 ...

  6. Java 企业级 JavaEE

    授权协议:CDDL 开发语言:Java 操作系统:跨平台 开发厂商:Oracle 原文:https://www.oschina.net/p/j2ee Java EE 详细介绍 这是SUN公司推出的J2 ...

  7. HTML标签播放MP4视频

    1.使用 <object> 标签播放视频 <object width="500" height="300" data="http:/ ...

  8. Renderscript图像处理

    作者:慧能 最近正在学习renderscript,后期会整理一篇完整的文档,先记着.... https://blog.csdn.net/codemydream/article/details/5346 ...

  9. PHP常见错误提示含义解释

    1.Notice: Undefined variable: 变量名 in 注:使用了一个没有被定义的变量 2.Parse error: syntax error, unexpected T_ELSE ...

  10. 并行(多进程)-python

    1.进程创建 2.当前进程信息 使用current_process可获得当前进程的信息: (1)引入:from multiprocessing import current_process (2)获取 ...