C语言中的指针是一个存储另一个变量的地址的变量。
如果我们要存储一个变量的地址到另一个变量,则该变量称为指针。
它与星号符号(*)一起声明。声明指针的语法如下:
int *p;
分配和访问变量:
#include <stdio.h>
int main()
{
int a;
int *p;
scanf("%d", &a);
p = &a;
printf("%p\n", p);
printf("%d\n", *p);
return 0;
}
不同类型的指针
有四种类型的指针,它们是:
- NULL指针
- 无效指针
- 野生指针
- Dangling Pointer
空指针:
未分配任何值但NULL的指针被称为空指针。
如果在声明时指针中没有任何地址要在指针中指定,我们可以分配空值。它将提供更好的方法。
语法:
Int *p = NULL;
示例:
#include<stdio.h>
int main(){
int *p = NULL;
printf(“p=%d”,*p);
}
无效指针:
当指针用空隙关键字声明时,则称为“无效指针”。要打印该指针的价值,您需要将其输入。
语法:
void *p;
示例:
#include<stdio.h>
int main()
{
int a=2;
void *p;
p= &a;
printf("After Typecasting, a = %d", *(int *)p);
return 0;
}
野生指针:
野生指针仅声明但未分配任何变量的地址。它们非常棘手,并且会推理细分错误。
示例:
#include<stdio.h>
int main(){
int *p;
printf(“p=%d”,*p);
return 0;
}
悬空指针:
指向已删除(或释放)的内存位置的指针称为悬空指针。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p=(int *)malloc(sizeof(int));
int a=5;
p=&a;
free(p);
//now this p is known as dangling pointer.
printf(“After deallocating its memory *p=%d”,*p);
return 0;
}
指针指针
指针将间接通过另一个指针指向变量。
这样的东西:pointer of pointer of pointer of pointer of variable
示例:
#include <stdio.h>
int main()
{
int a = 5;
int *p = &a;
int **q = &p;
printf("%d\n", a);
printf("%p\n", p);
printf("%p\n", q);
**q = 7;
printf("%d\n", a);
return 0;
}
按价值通过并通过参考
通过
我们将通过参考而不是通过价值传递。
示例:
#include <stdio.h>
int swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int x = 5, y = 7;
printf("Before swapping x=%d , y=%d\n", x, y);
swap(&x, &y);
printf("After swapping x=%d , y=%d\n", x, y);
return 0;
}