传递一个指针进去用(指针不能被修改)*p;
来源:互联网 发布:人工智能战胜人类 编辑:程序博客网 时间:2024/05/21 09:57
《高质量C++编程》中的一个例子,程序代码如下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void GetMemory(char* p)
{
p = (char *)malloc(100);
}
void main(void)
{
char* str = NULL;
GetMemory (str);
strcpy(str, "hello world/n");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:程序崩溃。
因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
但是我还是没有想明白,既然在main中GetMemory函数入口参数是一个指针,那么str指针作为参数应该是被作为“指针传递”而不是“值传递”
那么在GetMemory函数中str指针应该能够得到初始化,但为什么在GetMemory函数退出后,str指针的值却还原为NULL了
百思不得其解,望各位拍转拍醒我吧,谢谢!
=========================================
应该改为: 指针也是值,本质上任何函数传递都是值传递,只不过传递指针的值的时候指针的值是"地址",你去好好体会一下吧 我是这样理解的 =============================================== 传指针可以改变指针所指向的那块内存的内容。而为指针分配内存,是让指针指向一块合法的内存,改变指 ================================================ 是否可以这样说:
{
*p = (char *)malloc(100);
}
int main(void)
{
char* str = NULL;
GetMemory (&str);
strcpy(str, "hello world/n");
printf(str);
return 0;
}
你传了个指针进来,其实是传递了一份拷贝
这份地址拷贝通过new以后已经指向是一个新的值了
函数跑完后,变的是这这个指针的拷贝,而不是传进来的指针
加个引用其实就很好理解了
你传了个指针进来,其实是传递了一份拷贝
这份地址拷贝通过new以后已经指向是一个新的值了
函数跑完后,变的是这这个指针的拷贝,而不是传进来的指针
加个引用其实就很好理解了
针本身所含的内容(地址)。达到这个目的,传递的只要是指针的指针才可以。
传递一个指针进去用(指针不能被修改)*p;
而返回一个指针要用**p;
{
*p = (char *)malloc(100);
}
int main(void)
{
char* str = NULL;
GetMemory (&str);
strcpy(str, "hello world/n");
printf(str);
return 0;
}
指针也是值,本质上任何函数传递都是值传递,只不过传递指针的值的时候指针的值是"地址",你去好好体会一下吧 我是这样理解的
你传了个指针进来,其实是传递了一份拷贝
这份地址拷贝通过new以后已经指向是一个新的值了
函数跑完后,变的是这这个指针的拷贝,而不是传进来的指针
加个引用其实就很好理解了
你传了个指针进来,其实是传递了一份拷贝
这份地址拷贝通过new以后已经指向是一个新的值了
函数跑完后,变的是这这个指针的拷贝,而不是传进来的指针
加个引用其实就很好理解了
===============================================
传指针可以改变指针所指向的那块内存的内容。而为指针分配内存,是让指针指向一块合法的内存,改变指
针本身所含的内容(地址)。达到这个目的,传递的只要是指针的指针才可以。
================================================
是否可以这样说:
传递一个指针进去用(指针不能被修改)*p;
而返回一个指针要用**p;
- 传递一个指针进去用(指针不能被修改)*p;
- 传递一个指针进去用(指针不能被修改)*p;
- 进程之间不能传递指针。。
- 指向指针的指针**p改变*p值可以传递数值并且不改变p地址
- 为什么常量指针不能修改
- 指针++*p++
- 指针P
- 指针 *p++和*++p
- 指针中的 &p, p, *p
- int *P;声明一个指针,没有值。
- 绝对不能通过指针修改常量!!!!!!
- 指针指向的字符串不能修改
- 为什么不能修改指向字符串的指针
- 指针传递
- 指针传递
- 指针传递
- p指针->AddRef() 和 p指针->Relase()
- 传递指针和传递指针的指针
- 产生inner class对象
- 利用showModalDialog實現當前頁窗體彈出試偉值
- 为你的程序添加系统级热键
- 水晶报表的5种表格设计模式
- 好累, 真的好累
- 传递一个指针进去用(指针不能被修改)*p;
- 使用Java中的Date和Calendar类
- 传输与交换
- 几个常见的关于日期的问题 选择自 baobao8505 的 Blog
- 十八个超经典故事
- 踩人
- TCP Wrapperes 的规则---配置hosts.deny
- C#实现WEB服务器
- struts学习笔记---配置数据源