C语言 - 指针

C语言 - 指针 首页 / C语言入门教程 / C语言 - 指针

C语言中的指针是一个变量,用于存储另一个变量的地址。此变量的类型可以是int,char,array,function或任何其他指针。指针的大小取决于体系结构。但是,在32位体系结构中,指针的大小为2个字节。

考虑以下示例,以定义一个存储整数地址的指针。

int n = 10; 
int* p = &n;//指针类型的变量 p 指向整数类型的变量 n 的地址. 

声明指针

可以使用*(星号)声明c语言中的指针。也称为间接指针,用于取消对指针的引用。

int *a;//指向 int 的指针
char *c;//指向 char 的指针

指针示例

下面给出了使用指针打印地址和值的示例。

pointer example

如上图所示,指针变量存储数字变量的地址,即fff4。数字变量的值为50。但是指针变量p的地址为aaa3。

链接:https://www.learnfk.comhttps://www.learnfk.com/c-programming/c-pointers.html

来源:LearnFk无涯教程网

借助*(间接运算符),我们可以打印指针变量p的值。

让我们看一下上图所解释的指针示例。

#include<stdio.h>  
int main(){
   int number=50;  
   int *p;    
   p=&number;// 存储number变量的地址 
   printf("Address of p variable is %x \n",p);//p 包含number的地址,因此打印 p 给出number的地址。
   printf("Value of p variable is %d \n",*p); //如果我们打印 *p,我们将获得存储在 p 包含的地址处的值。
   return 0;
}  

输出

Address of number variable is fff4
Address of p variable is fff4
Value of p variable is 50

数组指针

int arr[10];
int *p[10]=&arr;//指针类型的变量 p 指向整数数组 arr 的地址。

函数指针

void show (int);
void(*p)(int) = &display;//指针 p 指向函数的地址

结构指针

struct st {
	int i;
	float f;
}ref;
struct st *p = &ref;
c pointers

&运算符

运算符“&"的地址返回变量的地址。但是,我们需要使用%u来显示变量的地址。

#include<stdio.h>  
int main(){
  int number=50; 
  printf("value of number is %d, address of number is %u",number,&number);  
  return 0;
}  

输出

value of number is 50, address of number is fff4

空指针

未分配任何值但为NULL的指针称为NULL指针。如果声明时在指针中没有指定任何地址,则可以分配NULL值。它将提供更好的方法。

int *p=NULL;

在大多数库中,指针的值为0(零)。

指针示例

#include<stdio.h>  
int main(){
  int a=10,b=20,*p1=&a,*p2=&b;
  printf("Before swap: *p1=%d *p2=%d",*p1,*p2);
  *p1=*p1+*p2;
  *p2=*p1-*p2;
  *p1=*p1-*p2;
  printf("\nAfter swap: *p1=%d *p2=%d",*p1,*p2);
  return 0;
}

输出

Before swap: *p1=10 *p2=20
After swap: *p1=20 *p2=10

读取复杂指针

在阅读C语言中的复杂指针时,必须考虑几件事。让我们看一下关于指针使用的运算符的优先级和关联性。

操作员优先级关联性
(),[] 1从左到右
*,identifier 2从右到左
Data type 3-

在这里,我们必须注意到,

  • ()                -  此运算符是用于声明和定义函数的方括号运算符。
  • []                -  此运算符是数组下标运算符
  • *                 -  此运算符是指针运算符。
  • Identifier  -  这是指针的名称。优先级将始终分配给它。
  • Data type  -  数据类型是指针要指向的变量的类型。它还包括修饰符,例如signed int,long等。

如何读取指针:int(* p)[10]。

要读取指针,我们必须看到()和[]具有相同的优先级。因此,在这里必须考虑它们的关联性。关联性是从左到右,因此优先级为()。

在方括号()中,指针运算符*和指针名称p具有相同的优先级。因此,在这里必须考虑它们的关联性,即从右到左,因此优先级为p,第二优先级为*。

由于数据类型具有最后优先级,因此将[]分配第三优先级。因此,指针将如下所示。

  • char -> 4
  • * -> 2
  • p -> 1
  • [10] -> 3

将读取该指针,因为p是指向大小为10的整数数组的指针。

指针有许多但很简单的概念,它们对C编程非常重要。任何C程序员都应该清楚以下重要的指针概念-

Sr.No.Concept & 描述
1 Pointer arithmetic

指针中可以使用四种算术运算符:++,-,+,-

2 Array of pointers

您可以定义数组以容纳多个指针。

3 Pointer to pointer

C允许您将指针放在指针上,依此类推。

4 Passing pointers to functions in C

通过引用或地址传递参数可以使被调用函数在调用函数中更改传递的参数。

5 Return pointer from functions in C

C允许函数返回指向局部变量,static 变量和动态分配的内存的指针。

无涯教程网

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

AI技术内参 -〔洪亮劼〕

趣谈网络协议 -〔刘超〕

趣谈Linux操作系统 -〔刘超〕

Web协议详解与抓包实战 -〔陶辉〕

从0打造音视频直播系统 -〔李超〕

Serverless入门课 -〔蒲松洋(秦粤)〕

爆款文案修炼手册 -〔乐剑峰〕

eBPF核心技术与实战 -〔倪朋飞〕

工程师个人发展指南 -〔李云〕

好记忆不如烂笔头。留下您的足迹吧 :)