间接赋值从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 ; }