一级指针的介绍
指针变量的定义的一般形式
类型标识符 *变量名 如 int *p;
解释:p是一个指针变量,用来存放整型变量的地址。(这里定义了一个指向整形数据的指针变量)p本身也是有一个地址的(对二级指针有帮助,这里主要说一下一级指针)
注意:1、int *p=&a,a; 这是错误的因为变量只有被定义后才能被分配内存单元,而这句代码说的是一个int形的指针指向a的地址。然而a的地址在被指向之前未被定义。2、被定义的类型指针只能指向该类型的变量的地址。
例如 :int a,*p=&a;
float *p1;
p1=p;这样的幅值是错误的,需要幅值则需要强制类型转换如 p1=(float *)p;
原因,不同类型的指针变量访问的储存单元大小不一样,char和int就不一样,除此之外不同类型数据的储存格式也不一样。
定义指针用 int *p;引用指针的变量的内容用 *p; *p表示指针指向的内容。
#include <stdio.h>int main()
{int num = 10; // 定义一个整型变量int *ptr; // 声明一个指向整型的指针变量ptr = # // 初始化指针,使其指向变量 num 的 //*ptr = 20; 这一操作将指针 ptr 所指向的变量 num 的值修改为 20。printf("num 的值: %d\n", num);printf("通过指针 ptr 访问 num 的值: %d\n", *ptr);//输出是10 10 printf("num 的地址: %p\n", &num);printf("指针 ptr 存储的地址: %p\n", ptr);//输出是num和ptr变量的值 return 0;
}
指针作为函数参数:把指针作为函数参数传递,能够在函数内部修改调用函数中的变量值。示例如下:
#include <stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;
}int main()
{int x = 5, y = 10;printf("交换前: x = %d, y = %d\n", x, y);swap(&x, &y);printf("交换后: x = %d, y = %d\n", x, y);return 0;
}
//输出5,10//输出10,5
swap
函数接收两个指针作为参数,通过解引用操作交换这两个指针所指向变量的值。
指针变量引用的注意事项
- 空指针:指针变量可以被初始化为
NULL
,表示它不指向任何有效的内存地址。在使用指针之前,最好先检查它是否为NULL
,以避免空指针引用错误。 - 野指针:野指针是指指向无效内存地址的指针。使用野指针可能会导致程序崩溃或产生未定义行为。要避免使用野指针,确保在使用指针之前对其进行正确的初始化。