指针的定义--应用场景

发布时间 2024-01-12 14:46:35作者: paopaotangzu

1 指针的本质

1.1-指针的定义

  1. 如果在程序中定义了一个变量,那么在对程序进行编译时,系统就会给这个变量分配内存单元。在C语言中,指针变量是一种特殊的变量,它用来存放变量地址。指针变量的定义格式如下:基类型 *指针变量名
    另外注意:指针变量加1后,偏移的长度是其基类型的长度,例如int *p; ,整形指针变量p,p+1是偏移sizeof(int)
  2. 按变量地址存取变量值的方式称为直接访问,如printf("%d\n", i); scanf("%d", &i);等。
  3. 将变量i的地址存放到另一个变量中,这一种存取变量值的方式称为间接访问
  4. 指针与指针变量是两个概念,一个变量的地址称为该变量的“指针”。如果有一个变量专门用来存放另一个变量的地址(即指针),那么称它为“指针变量”。

1.2-取地址操作符与取值操作符

  • 取地址操作符为&,也称引用,通过该操作符我们可以获取一个变量的地址值。
  • 取值操作符为*,也称解引用,通过该操作符我们可以得到一个地址对应的数据。
int i = 10;
int j = 5;
int *p;  //p就是一个指针变量,p可以用来存储地址,类型是整型指针
p = &i;  //初始化赋值
printf("i=%d\n",i); //直接访问
printf("*p=%d\n",*p);//间接访问

2 指针的使用场景

指针的使用场景只有两个,即传递和偏移,记住只有在这两种场景下使用指针。

2.1-指针的传递

  • C语言的函数调用均为值传递,所以为了能够在子函数中修改main函数内某个变量的值,可以传递该变量的地址。

2.2-指针的偏移

#include <stdio.h>

int main()
{
	int a[5] = { 1,2,3,4,5 };

	int* p;//对一个指针变量进行取值,得到的类型是其基类型
	p = a;
	printf("*p=%d\n", *p);
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", *(p + i));
	}
	return 0;
}

指针变量加1后,偏移的长度是其基类型的长度,如上述例子中,(p+0)即a[0],(p+1)即a[1],加括号是为了运算符的优先级原因。