指针的输入输出模型

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

//指针做输出,被调用函数分配内存 √
//指针做输入,主调函数分配内存
//求两段话的长度
int getNum(char **myp1,int *mylen1,char **myp2,int *mylen2)
{
    int ret = 0;
    char *tmp1 = NULL;
    char *tmp2 = NULL;
    tmp1 = (char *)malloc(100);
    if (tmp1 == NULL)
    {
        return -1;
    }
    tmp1 = strcpy(tmp1, "abcdefg");
    *mylen1 = strlen(tmp1);
    *myp1 = tmp1;    //间接修改实参p1的值

    tmp2 = (char *)malloc(100);
    if (tmp2 == NULL)
    {
        return -2;
    }
    tmp2 = strcpy(tmp2, "11222");
    *mylen2 = strlen(tmp2);
    *myp2 = tmp2;    //间接修改实参p2的值
    return ret;
}

int getNum_Free(char **myp1)
{
    //if (myp1 == NULL)
    //{
    //    return;
    //}
    //free(*myp1);    //释放完指针变量,所指的内存空间
    //*myp1 = NULL;    //把实参改成NULL

    //或者这么写
    char *tmp;
    tmp = myp1;
    if (myp1 == NULL)
    {
        return -1;
    }
    tmp = *myp1;
    free(tmp);
    *myp1 = NULL;
    return 0;
}
int main()
{
    char *p1=NULL, *p2=NULL;
    int len1 = 0,len2 = 0;
    int ret = 0;
    ret = getNum(&p1, &len1, &p2, &len2);

    if (!ret)
    {
        printf("p1:%s\n", p1);
        printf("p2:%s\n", p2);

        getNum_Free(&p1);
        getNum_Free(&p2);
    }
    else
    {
        printf("func getNum():%d", ret);
    }
    system("pause");
    return 0;
}
时间: 2024-12-16 10:12:39

指针的输入输出模型的相关文章

C++虚基类表指针字节对齐模型

关于虚基类表指针/虚函数表指针这些类里面的"隐藏成员"在结构里面是如何进行字节对齐的这个问题困惑了我48个小时.虽然网上也有很多关于虚继承.虚函数表.虚基类等内存布局的一些文章,但是基本上谈的都是大致的布局,什么地方有什么,按照什么顺序来排放等这些泛泛而谈的东西,好像都没有把字节对齐方面考虑进去的文章,或许他们都没有考虑到一些复杂层次的类继承关系,从而字节对齐的问题也没有成为问题,也自然而然地会被忽略掉,或者得出错误的对齐规则结论. 也许是我一开始就走错了路,在错误中越走越远,尝尽了各

字符串一级指针的内存模型图(盲点,以前自己懵懂)

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> void main61() { char buf[20]= "aaaa"; //定义并且初始化 char buf2[] = "bbbb"; char *p1 = "111111"; char *p2 = malloc(100); s

C/C++ 结构体 指针 简单输入输出

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct student{ 5 int num; 6 char str[20]; 7 double dec; 8 }; 9 10 int main(){ 11 int n; 12 struct student *stu; 13 14 scanf("%d", &n); 15 stu = (struct student *)malloc(n * sizeof(s

C语言提高内容目录

(1)基础 数据类型和变量 内存四区(栈 堆 全局 代码区) (2)指针和字符串操作 指针强化 字符串的基本操作 字符串一级指针内存模型图 字符串做为函数参数 (3)二级指针多级指针 二级指针的输入输出模型 二级指针输入的三种内存模型 多级指针的使用 (4)数组 一维数组  二维数组 数组类型  数组指针类型 数组指针类型变量 多维数组 (5)结构体 结构体的使用 (6)文件操作 文件读写操作 配置文件的读写案例(自定义接口) 文件的加密和解密案例(使用别写好的接口) (7)进阶知识 预处理 如

二级指针的三钟内存模型

/* Level tow point have three cache model */ #include <stdio.h> #include <stdlib.h> int Print(char**pArr); int Print02(char**pArr,int num); int GetMem(char***thirdModel,int len); int Destory(char***thirdModel,int len); int main() { int i=0; ch

二级指针的3种内存模型

二级指针的内存模型 二级指针的第一种内存模型 Char*Accary [ ] ={ "aaaaaa", "bbbbbb", "ccccccc" }; //接口形参使用方式 Intprintfarr(char **ArrayStr,int iNUm) { For(i =0; i<iNUm; i++) { Printf("%s \n", ArrayStr[i]); } } //调用方式 Printfarr(Accary, 3

C提高 3 字符串与二维指针

二维指针三种内存模型图: 统计字符串两头,非空字符的长度 #include <stdio.h>  #include <stdlib.h> #include <string.h> int main() { //统计字符串两头,非空字符的长度 char *p = "  abc   "; int i = 0; int j = strlen(p) - 1; int count = 0; while (isspace(p[i]) && p[i]

DirectX的OBJ模型加载与渲染

在之前的DirectX例子里我用的模型是.x文件,DirectX有一个方法D3DXLoadMeshFromX可以加载.x模型,但是这里有个问题,.x文件是没法用文本编辑器打开查看结构的,这里我来演示一下如何解析.obj模型. 首先让我们看一下.obj模型的组成部分以及结构,一个完整的obj模型一共分为三个部分:obj模型文件,mtl材质文件,纹理贴图;其中obj文件和mtl文件是可以用文本编辑器打开的,先打开obj文件,可以看到这样的内容: v -3.000767 2.993211 2.0142

c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针

可以说新手使用P-INVOKE最开始的头疼就是C#和C++的字符串传递,因为这里涉及到两个问题. 第一:C#的string和C++的字符串首指针如何对应. 第二:字符串还有ANSI和UNICODE(宽字符串)之分. 本文分三部分阐述: 第一:字符串指针当输入参数, 第二:字符串指针作为返回值, 第三:字符串指针作为输入输出参数. C++部分的测试代码很简单这里就全部贴出来了: 1 #include "stdafx.h" 2 #include "TestDll.h"