C语言中的指针是一个变量,用于存储另一个变量的地址。此变量的类型可以是int,char,array,function或任何其他指针。指针的大小取决于体系结构。但是,在32位体系结构中,指针的大小为2个字节。
考虑以下示例,以定义一个存储整数地址的指针。
int n = 10; int* p = &n;//指针类型的变量 p 指向整数类型的变量 n 的地址.
可以使用*(星号)声明c语言中的指针。也称为间接指针,用于取消对指针的引用。
下面给出了使用指针打印地址和值的示例。
如上图所示,指针变量存储数字变量的地址,即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;
运算符“&"的地址返回变量的地址。但是,我们需要使用%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 | - |
在这里,我们必须注意到,
如何读取指针:int(* p)[10]。
要读取指针,我们必须看到()和[]具有相同的优先级。因此,在这里必须考虑它们的关联性。关联性是从左到右,因此优先级为()。
在方括号()中,指针运算符*和指针名称p具有相同的优先级。因此,在这里必须考虑它们的关联性,即从右到左,因此优先级为p,第二优先级为*。
由于数据类型具有最后优先级,因此将[]分配第三优先级。因此,指针将如下所示。
将读取该指针,因为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 变量和动态分配的内存的指针。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)