C语言学习笔记————–初识指针

/ 0评 / 0

        指针是C语言中非常重要的一个数据概念,会玩指针才是真的入了C语言的大门。

        我们在使用变量的时候直接使用变量名来获取变量的值,这是直接引用,但是程序内部可并没有这么简单,而是声明变量时先给变量分配一个地址,在读取的时候读的是这个地址所存储的二进制数,然后转换成我们要的值。
        那什么是指针呢?我们已经知道读取变量使用的是直接引用,那相对的肯定存在间接引用,指针就是间接引用,是吧变量对应的地址作为值赋给指针,在修改或者使用的时候先去除指针的值,也就是变量的地址,然后根据这个地址修改对应地址的值,如图:

指针概念

        总结:用来存放变量地址的变量,就称为"指针变量"。在上面的情况下,变量b就是个"指针变量",我们可以说指针变量b指向变量a。

指针的定义

 
int a = 100;

float b = 100.0;

//先定义,后初始化

int *c;

c = &a;  //把a的地址赋值给c


//定义的同时初始化

float *d = &b;

//但是不能直接给指针变量赋值,比如  int *a;a = 200;

        "*"是一个说明符,用来说明这个变量是个指针变量,是不能省略的,但它不属于变量名的一部分,前面的类型标识符表示指针变量所指向的变量的类型,而且只能指向这种类型的变量。

通过指针赋值

 
int a = 10;

printf("赋值之前a的值为%d\n",a );

int *b = &a;

*b = 100;

printf("赋值之后a的值为%d\n",a );

// a其实也就是*b对应的值,而b的值是a的地址&a

指针使用案例

 
void swap(int a, int b){

	printf("更换前:a=%d, b=%d\n", a, b);

	int tem = a;
	a = b;
	b = tem;

	printf("更换后:a=%d, b=%d\n", a, b);
}


int int main(int argc, char const *argv[]){
	 int x = 10, y = 9;
         printf("更换前:x=%d, y=%d\n", x, y);
     
         swap(x, y);     
         printf("更换后:x=%d, y=%d", x, y);

	return 0;
}

        程序运行打印结果可知,a、b的值变了,但是x、y的值却没有变化,那这里我们就需要使用指针来修改程序了,只需把swap函数变为下面这样就可以了

 
void swap(int  *a, int  *b) {
	     // 中间变量
	     int temp;
	     
	     // 取出v1指向的变量的值
	     temp = *a;
	     
	     // 取出v2指向的变量的值,然后赋值给v1指向的变量
	     *a = *b;
	     
	      // 赋值给v2指向的变量
	      *b = temp;
}

评论已关闭。