前言
变量:就是给内存地址取一个别名;
1. 概述
这里记录下:通过指针变量修改值、通过方法修改值、通过地址修改值;
1. 通过指针变量修改值:有两种方式
1>:直接给变量重新赋值;
2>:获取指针变量p的值,间接修改;
2. 通过方法修改值:
通过运行代码,发现 修改前的i的值 与 change(int i)方法中的i的地址不是同一个,所以无法修改;
根据这个可以得出一个结论:在以后见到都是有用的:只要通过方法修改两个变量的值,都是无法修改的,
因为这两个变量的地址已经变了,所以无法修改;
3. 通过地址修改值:
这里就需要把地址给传递进来,用 int* p来接收传递过来的地址,这里的p就已经是地址了,可以直接打印p,
就表示输出的是 地址;
2. 代码如下
1>:通过指针变量修改值:一般有两种方式:
a:直接给变量重新赋值;
b:获取指针变量p的值,间接修改;
#include<stdio.h> // 导入头文件,头文件都是方法的声明。
// 通过指针修改值
void main(){
// 定义变量 i
int i = 100;
// 获取 i的地址,用指针变量 int* p来接收
int* p = &i;
// 方式 1:直接给 i重新赋值
i = 200;
// 方式 2:获取指针变量 p的值,来间接修改
// *p:表示 获取指针变量 p的值,来修改i的值
*p = 300;
printf("i的值为:%d\n", i); // 300
getchar();
}
2>:通过方法修改值:
通过运行代码,发现 修改前的i的值 与 change(int i)方法中的i的地址不是同一个,所以无法修改;
#include<stdio.h> // 导入头文件,头文件都是方法的声明。
// 在c中,调用顺序是从上往下执行,所以调用方法需要写到上边
// 通过方法修改值:通过打印可知:i的地址和change中的地址不是同一个,所以无法修改,这里可以通过地址来修改
void change(int i){
printf("change中i的地址是:%p\n", &i); // i的地址是:0019F894
i = 200;
}
void main(){
int i = 100;
printf("i的地址是:%p\n", &i); // i的地址是:0019F968
printf("i的值为:%d\n" , i);
// change(i);
change(&i);
printf("i修改后的值为:%d\n", i);
getchar();
}
3>:通过地址修改值:可以修改成功,i修改后的值 为 200 ;
#include<stdio.h> // 导入头文件,头文件都是方法的声明。
// 通过地址修改值:这里就需要把地址传递进来,用int* p来接收传递过来的地址,因为 这里的 p 就相当于 p = &i,
// 所以 这里的 p就已经是地址了;
void change(int* p){
printf("change中i的地址是:%p\n", p);// 这里的p已经是地址,可以直接打印
*p = 200; // 通过 *p就可以获取 p地址的值,然后给其赋值为200
}
void main(){
int i = 100;
printf("i的地址是:%p\n", &i); // i的地址是:0019F968
printf("i的值为:%d\n" , i);
// change(i);
change(&i);
printf("i修改后的值为:%d\n", i); // 200
getchar();
}