C语言基础-指针(二)为什么用指针

两个原因:

1、强制设置一个变量存放在一个地址

2、摆脱形参、实参

原因一:强制设置一个变量存放在一个地址

	int a = 2;
    int* b = (int *)0x0060FEEC;
    *b = 20;
    printf("a的地址%p\na的内容%d\n",&a,a);
    printf("b的地址%p\nb的内容%d\n",b,*b);

在这里插入图片描述

用途:ARM裸机编程、ARM驱动编程

volatile int* b = (int *)0x0060FEEC;

volatile:
简易:可以保证每一次取数据都是在内存地址中取,虽然损失了时间,但可以保证每一次取出的数都是一致的,避免出现寄存器替换导致的变量值改变。
更完整:有些变量是用 volatile 关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用 volatile 声明,该关键字的作用是防止优化编译器把变量从内存装入 CPU 寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。volatile的作用

原因二:摆脱形参、实参

使用形参、实参:传入的是数

void swap(int a,int b)
{
    
    
	int tmp;
    tmp = a;
    a = b;
    b = tmp;
}
int main()
{
    
    
	int a = 1;
    int b = 2;
    printf("a=%d,b=%d\n",a,b);
    swap(a,b);
    printf("a=%d,b=%d",a,b);
	system("pause");
	return 0;
}

在这里插入图片描述

如果一定要使用形参和实参的方式:则可以通过设置全局变量来实现、或通过return 返回(可传回一个数组指针)

全局变量法简写:
int c = 0;//此为全局变量c
void swap(int a,int b)
{
    
    
	int tmp;
    tmp = a;
    a = b;
    b = tmp;
    c = b;
}
int main()
{
    
    
	int a = 1;
    int b = 2;
    printf("默认c=%d\n",c);
    printf("a=%d,b=%d\n",a,b);
    swap(a,b);
    printf("a=%d,b=%d\n",a,b);
    printf("经过swap的c=%d",c);
	system("pause");
	return 0;
}

在这里插入图片描述

使用指针:传入的是地址

void swap(int* a,int* b)
{
    
    
	int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
int main()
{
    
    
	int a = 1;
    int b = 2;
    printf("a=%d,b=%d\n",a,b);
    swap(&a,&b);
    printf("a=%d,b=%d",a,b);
	system("pause");
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44933419/article/details/112293496
今日推荐