一、对参数指针的地址修改
参数的地址是可以修改的,修改后的地址是不可能传回给调用处的指针变量。也就是说,可以修改参数地址所指的单元的值,这是可以传回到调用处的变量里面的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int subFunc(int arr[3]);
//交换两整数
void change(int *data1, int *data2) {
int *temp;
//交换两数的地址
temp = data1;
data1 = data2; //修改参数1的地址
data2 = temp; //修改参数2的地址
//交换后的地址在函数内没问题,但不能传回主程序
printf("change:data1=%d, data2=%d\n", *data1, *data2);
return ;
}
//动态获得内存 //| //改为如下内容便可以传回主程序
void getMemory(int size, char *str) { //| char *getMemory(int size) {
//动态分配的内存地址赋给str //|
str = (char *)malloc(size); //| return (char *)malloc(size);
//|
return ; //| }
} //|
//| //主程序的调用也得改成: p = getMemory(40) ;
int main(void)
{
int x = 25, y = 87 ;
change(&x, &y);
printf("main:x=%d, y=%d\n", x, y); //x,y未得到交换
getMemory(40, p); //p未得到内存
strcpy(p, "这是小雅的C语言教程"); //这句有错,注释之后才能得到上图结果
free(p) ;
return 0;
}
|