• 四.利用指针间接赋值


    4.利用指针间接赋值

    我们都知道,指针是指向一段内存空间的。而这个内存空间也可以存放下一个内存空间的地址,这样一级级的传递下去,就变成了多级指针。在C语言中,多级指针是经常会用到的。

    多级指针像一把双刃剑,有利也有弊。你能够用它完成一些奇淫技巧,也会遇到一些不可捉摸的错误。

    其中,指针有一个非常重要的作用:间接赋值

    你能够通过n级指针去修改n-1级指针的内容,甚至直接修改指针所指向的内存空间

    例如:

    你在main函数里面声明了一个字符串指针,然后你想通过调用一个外部函数来修改它。这个时候,你就可以将这个字符串指针的地址传递给函数。这样,函数的参数就是一个二级指针了,通过这个二级指针,你可以很方便的修改字符串的内容。

    代码如下:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int Test1(char **p1)
    {
    	char *temp = (char *)malloc(50); 
    	strcpy(temp,"hey!");  //间接赋值
    	*p1 = temp;     //更改指针所指向的内存空间
    	printf("T1 %d
    ",*p1);  //打印出地址
    }
    
    int Test2(char *p2)
    {
    	strcpy(p2,"goodBy!");
    	printf("T2 %d
    ",p2);  //打印出地址 ,会发现和实参的地址一样
    }
    
    
    //间接赋值
    //利用n级指针 改变n-1级指针的值
    int main(int argc,char *argv[])
    {
    	char *p = (char *)malloc(100);
    	printf("%d
    ",p);
    	strcpy(p,"hello");
    
    	Test1(&p);  //通过n+1级指针直接更改指向的内存空间
    	printf("T1 修改后的值 %s
     ",p);
    
    	Test2(p);   //通过同级指针更改内容
    	printf("T2 修改后的值 %s
     ",p);
    	system("pause");
    	return 0;
    }
    

    上述代码中有两个函数,其中Test1直接通过n+1级指针修改了p所指向的内存空间,而Test2只是修改了p所指向内存空间的内容。它们都能够修改p的内容,但是相对于test2而言,test1更为彻底。当然,具体选用那种方式,还是要根据实际的项目需求来定。

  • 相关阅读:
    最长公共子序列
    BFS 从起始点到目标点的最短步数
    熟悉的A+B
    跳格子 完全背包
    pccontrol_scr
    VB快速读取TextBox第N行的数据 (转载)
    日语初学者会话
    语法着色控件使用典型范例
    2008年日语3级真题
    纯api实现ping主机(仅仅返回是否ping通)
  • 原文地址:https://www.cnblogs.com/hanhuo/p/9373428.html
Copyright © 2020-2023  润新知