东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1057|回复: 2

[C/C++] 间接赋值是指针存在的最大意义;间接赋值的工程意义!

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14429
QQ
发表于 2021-4-13 16:22:07 | 显示全部楼层 |阅读模式

间接赋值是指针存在的最大意义;间接赋值的工程意义!

函数调用时,形参传给实参,用实参取地址传给形参,在被调用函数里面用*p来改变实参,把运算结果传出来!
指针作为函数参数的精髓!是C语言的精华!
主函数和被调函数之间通过内存交换运算结果!


  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>


  5. //间接赋值是指针存在的最大意义;间接赋值的工程意义!
  6. //指针作函数参数异常重要! 简单的分层:main()函数调用很多子函数  接口的封装与设计 软件工程

  7. int  getMem3(char **myp1, int *mylen1,  char **myp2, int *mylen2)
  8. {
  9.         int                ret = 0;
  10.         char        *tmp1, *tmp2;

  11.         tmp1 = (char *)malloc(100);
  12.         strcpy(tmp1, "309623978");

  13.         //间接赋值
  14.         *mylen1 = strlen(tmp1);  //1级指针
  15.         *myp1 = tmp1; //2级指针的间接赋值

  16.         tmp2 = (char *)malloc(200);
  17.         strcpy(tmp2, "东方老师微信:dfy_88888");

  18.         *mylen2 = strlen(tmp2);  //1级指针
  19.         *myp2 = tmp2; //2级指针的间接赋值


  20.         return ret;
  21. }


  22. int main(){
  23.         
  24.         int                ret = 0;
  25.         char        *p1 = NULL;
  26.         int                len1 = 0;
  27.         char        *p2 = NULL;
  28.         int                len2 = 0;

  29.         ret = getMem3(&p1, &len1, &p2, &len2);

  30.         if (ret != 0)
  31.         {
  32.                 printf("func getMem3() err:%d \n", ret);
  33.                 return ret;
  34.         }
  35.         printf("p1:%s \n", p1);
  36.         printf("p2:%s \n", p2);
  37.         if (p1 != NULL)
  38.         {
  39.                 free(p1);
  40.                 p1 = NULL;
  41.         }
  42.         if (p2 != NULL)
  43.         {
  44.                 free(p2);
  45.                 p2 = NULL;
  46.         }


  47.         printf("p1:%d \n", p1);
  48.         system("pause");
  49.         return ret;
  50. }



复制代码



让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14429
QQ
 楼主| 发表于 2021-4-13 16:31:33 | 显示全部楼层
间接赋值成立的三个条件:1、定义变量 2、取地址,建立关联  3、*p
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14429
QQ
 楼主| 发表于 2021-4-13 17:07:09 | 显示全部楼层
在函数调用的时候:
用1级指针形参,去间接修改了0级指针(实参)的值!
用2级指针形参,去间接修改了1级指针(实参)的值!
用3级指针形参,去间接修改了2级指针(实参)的值!
用n级指针形参,去间接修改了(n-1)级指针(实参)的值!
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-19 08:56 , Processed in 0.171865 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表