指针值传递、指针的指针、指针的引用、无法返回临时变量地址

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

void GetMemory(char *p)
{
//char *p = str, p = str(值传递,跟str无关,内存分配失败)
p = (char*)malloc(100);
}
void GetMemory1(char **p)
{
//char **p = &str, p指向str指针的地址,*p指向str的地址,*p = str, *p分配内存即str分配内存成功
*p = (char*)malloc(100);
}
void GetMemory2(char* &p)
{
//p是str的引用,p还是str ,
p = (char*)malloc(100);
}
char* GetMemory3(void)
{
char p[] = "Hello World";
return p; //无法返回临时变量的地址
}
//int main(void)
//{
// char *str=NULL;
//// GetMemory(str);
//// GetMemory1(&str);
//// GetMemory2(str);
//// strcpy(str,"Hello world");
// str = GetMemory3();
// printf(str);
// return 0;
//}

int main(void)
{
char *str = (char*)malloc(100);
strcpy(str, "Hello");
// printf("first is %s\n",str);
free(str);
if(str != NULL)
{
strcpy(str, "World");
printf(str);
}
}

原文地址:https://www.cnblogs.com/embeddedking/p/9697203.html

时间: 2024-08-01 02:51:17

指针值传递、指针的指针、指针的引用、无法返回临时变量地址的相关文章

论函数的设计应如何才好,返回临时变量 | 返回引用 | 传递引用

这个就涉及效率的问题,怎么要写,才会尽可能的少调用构造函数. 先设计如下的类 class tempTest{ public: tempTest(){ cout <<"hello tempTest() "<<count++ << endl; } tempTest(tempTest& ){ cout <<"hello copy tempTest() "<<count++ << endl; }

【转】值传递、指针传递、引用传递的区别

1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出.当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递. void swap(int a,int b){     int temp;     temp=a;     a=b;     b=temp;     cout<<a<<’ ‘<<b<<’\n’;} int main(){     in

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

Golang 才是学习指针的安全之地,关于指针的二三事

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53305.html 本章学习目标 学会声明和使用指针 理解指针和随机访问存储器(RAM)之间的关系 了解指针的使用时机 当我们在街上散步的时候,常常会看到一些用于指引方位的地址和街道标识.你可能曾经遇到过这样一种情况,一家大门紧闭的商店在它的橱窗上贴出了道歉标语"抱歉,本店已乔迁新址!",并在标语的下方给出新的地址.指针就有点儿像这个给出新地址的标语,它会把你指引至不同的地址. 指针是指向另

C语言:值传递,地址传递和引用传递(example:值交换)

于C语言中值传递.地址传递和引用传递的我个人理解. 通过一个例子:swap(交换两个整型变量的值)来表现! 1 #include <stdio.h> 2 void swap1(int* a,int* b); 3 void swap2(int& a,int& b); 4 void swap3(int* a,int* b); 5 6 void main(){ 7 printf("Hello World!\n"); 8 int a = 3; 9 int b = 4

探索javascirpt-讨论值传递与引用传递

就大家所知, 基础数据类型赋值是值传递,(var a = 3, b=a, c=a; 此时令C=2,而b仍然为3) 而复杂数据类型赋值是引用传递(学过C语言了解指针很清楚,其相当于返回一个地址,通过地址来访问数据,所以一处改变值,各个变量保存此数据的访问都会改变) 然而大家请看这段代码 var c = (function() { var a = 'aaaa', b = 'bbbb'; function setAB(a, b) { this.a = a; this.b = b; } return {

c/c++值传递和引用传递

今天看数据结构的时候,因为是c语言版的,刚开始学的时候就对指针搞的焦头烂额,今天,发现参数传递的时候,&符号也莫名其妙,搜了一篇好文,转载下来. 一. 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递.以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存

java值和地址值传递、字符串常量池的理解

#java值和地址值传递的理解: - 基本数据类型和基本数据类型的封装类都是:值传递 * 形式参数的改变不会影响实际参数的改变(相当于将值复制一份传递给形参,自身没做任何改变) - 引用数据类型都是 地址值传递 * 形式参数的改变会影响实际参数的改变(将地址值赋值给形参,形参就可以指向实参所指向的地址, 即形参也可以操作实参指向地址的数据了) #注意:String是个特例(当作基本类型处理) - 分析:从String类的源码可以知道,String相当于是char[]的封装类,即具有char类型的

理解Java中的引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. >>基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变量保存引用值,"引用值"指向内存空间的地