间接赋值指针

间接赋值从0级指针到1级指针

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


//return 只能返回一个结果
//
int  getFileLen2()
{
    int a = 100;  
    return a;
}


int  getFileLen(int *p)
{
    *p = 41;  //  p的值是a的地址 *a的地址间接修改a的值 
    //在被调用函数里面 通过形参 去 间接的修改 实参的值...
}

//形参的属性
int  getFileLen3(int b)
{
    int  i = 0;
    b = 100;//  p的值是a的地址 *a的地址间接修改a的值
}


//1级指针的技术推演
void main32()
{
    int a = 10;  //条件1  定义了两个变量(实参 另外一个变量是形参p)
    int *p = NULL;

    //修改a的值
    a = 20; //直接修改

    p = &a;  //条件2 建立关联

    *p = 30; //p的值是a的地址 *就像一把钥匙 通过地址 找到一块内存空间 求间接的修改了a的值
    printf("a: %d \n", a);

    {
        *p = 40;  //  p的值是a的地址 *a的地址间接修改a的值  //条件3 *p
        printf("a: %d \n", a);
    }

    getFileLen(&a); //建立关联: 把实参取地址 传递给 形参
    printf("getFileLen后 a: %d \n", a);

    getFileLen3(a);
    printf("getFileLen3后 a: %d \n", a);


    printf("hello...\n");
    system("pause");
    return ;
}

间接赋值的工程意义:

//函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来

//指针做函数参数的精粹

//主函数和被调用函数之间通过内存交换结果。

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

int Getdoc(char **p1, int *mylen1, char **p2, int *mylen2)

{
    int ret = 0;
    char *tem1, *tem2;
    
    //指针之间可以相互赋值

    tem1 = (char *)malloc(100); //分配100个字节的空间,返回为指向字符的指针
    strcpy(tem1, "dsjfkfdjk");
    *mylen1 = strlen(tem1);  //1级指针
    *p1 = tem1;//2级指针的间接赋值

    tem2 = (char *)malloc(200);
    strcpy(tem2, "abcdefg23545");
    *mylen2 = strlen(tem2);  //1级指针
    *p2 = tem2;//2级指针的间接赋
    return ret;
}

int main()
{
    int ret = 0;
    int *p1 = NULL;
    int len1 = 0;
    int *p2 = NULL;
    int len2 = 0;

    ret = Getdoc(&p1, &len1, &p2, &len2);

    printf("p1:%s \n", p1);
    printf("p2:%s \n", p2);

    if (p1 != NULL)
    {
        free(p1);
        p1 = NULL;
    }
    if (p2 != NULL)
    {
        free(p2);
        p1 = NULL;
    }
    printf("p1:%d \n", p1);
    system("pause");
    return ret;
}


/*

间接赋值成立的三个条件
条件1 //定义1个变量(实参) //定义1个变量(形参)
条件2//建立关联:把实参取地址传给形参
条件3://*形参去间接地的修改了实参的值。
*/

//间接赋值的应用场景
void main37()
{
    //1 2 3 这3个条件 写在有一个函数
    //12 写在一块   3 单独写在另外一个函数里面  =====>函数调用
    //1         23写在一块 ===>抛砖 ====C++会有,到时候,你别不认识......
    char from[128];
    char to[128] = {0};
    char *p1 = from;
    char *p2 = to;

    strcpy(from, "1122233133332fafdsafas");

    while (*p1 != '\0')
    {
        *p2 = *p1;
        p2 ++;
        p1++;
    }

    printf("to:%s \n", to);
    
    system("pause");
    return ;

}

猜你喜欢

转载自www.cnblogs.com/yaozhenhua/p/9311191.html