初始C语言指针
- 1.指针的认识
 - 2.指针变量的引入
 - 3.指针变量的类型
 - 4.指针的应用场景1
 - 5.指针的应用场景2
 - 6.作业
 
1.指针的认识
-  
指针 = 地址
//int a = 10; //类型 变量名 内存地址 值 1.变量名直接访问 2.通过地址访问 &:取地址运算符 * :将地址内的值读取出来的运算符 -  
指针变量=存放地址的变量
 -  
#include <stdio.h> int main(){ int a = 10; //通过变量名直接访问 printf("%d\n",a); //通过地址进行访问 printf("a的地址是:%p\n",&a); //通过地址进行取a的值 printf("a=%d",*(&a)); return 0; } 
2.指针变量的引入
-  
定义指针变量
*的标识符作用:只产生指针变量定义或声明的时候
 -  
使用指针变量
*的运算作用:把后面跟的内存地址中的数据取出来
 -  
变量访问的两种方式
- 通过变量名直接访问
 - 通过指针间接访问

 
 
3.指针变量的类型
#include <stdio.h>
int main(){
	int a = 0x1234;
	int *p = &a;
	char *c = &a;
	//不管是int类型还是char型
	//我们都可以拿到相同的地址
	
	
	//都可以拿到相同的地址
	printf("p=%p\n",p);
	printf("c=%p\n",c);
	
	
	//取值运算符会根据指针变量类型来访问不同的空间大小
	printf("a=%x\n",*p);
	printf("c=%x\n",*c);	
}
 
4.指针的应用场景1
//进行函数的封装TEST的时候
//main函数调用的时候发生了值拷贝
//也就是通过函数名直接访问,但是会有bug
//原因如下
//1.虽然main函数的变量名和TEST变量名一样
//2.但是两个函数里面对应变量名的地址不一样
#include <stdio.h>
void change(int *data1,int *data2){
	int temp;
	temp   = *data1;
	*data1 = *data2;
	*data2 = temp;
	
}
int main(){
	int data1 = 10;
	int data2 = 20;
	printf("交换前:data1 = %d,data2 = %d\n",data1,data2);
	
	change(&data1,&data2);
	printf("交换后:data1 = %d,data2 = %d\n",data1,data2);
}
 
5.指针的应用场景2
#include <stdio.h>
int main(){
	int a = 10;
	printf("adress is %p\n",&a);
	volatile unsigned int *p  = (volatile unsigned int *)0x0061FE33;//整数强转为地址
	printf("p=%p\n",p);//特定的位置存放地址
	return 0;
}
//volatile:防止编译器自动优化内存地址
 
6.作业
封装函数来实现三个数从小到大的排序
#include <stdio.h>  
  
// 交换两个数的值  
void swap(int *a, int *b) {  
    int temp = *a;  
    *a = *b;  
    *b = temp;  
}  
  
// 排序函数,按照从大到小的顺序对三个数进行排序  
void sort_descending(int *a, int *b, int *c) {  
    if (*a < *b) {  
        swap(a, b);  
    }  
    if (*b < *c) {  
        swap(b, c);  
    }  
    if (*a < *b) {  
        swap(a, b);  
    }  
}  
  
// 输出三个数的函数  
void print_sorted(int a, int b, int c) {  
    printf("%d %d %d\n", a, b, c);  
}  
  
// 主函数  
int main() {  
    int a, b, c;  
  
    // 输入三个数  
    printf("请输入三个数(用空格分隔): ");  
    scanf("%d %d %d", &a, &b, &c);  
  
    // 调用排序函数进行排序  
    sort_descending(&a, &b, &c);  
  
    // 调用输出函数,打印排序后的结果  
    print_sorted(a, b, c);  
  
    return 0;  
}
                

















