C语言中的指针是指向内存中某个地址的变量。通过指针,可以直接访问或操作该地址处存储的数据。指针是存放的是地址,int*中,int说明指向的是int类型,*表示指针。
在C语言中,可以通过以下方式声明一个指针变量:
dataType *ptr;
int* p; // 指针
int* p1, p2, p3; // 一个指针两个int类型
int* p1, * p2, *p3; //都是指针
其中dataType
表示指针所指向的数据类型,ptr
表示指针变量的名称。
指针大小: 32系统为4个字节,64为系统为8个字节
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*)); // 全是4或8与系统位数有关,4*8 32 8*8 64
指针变量可以通过取地址运算符&
来获取一个变量的地址。例如:
int num = 10;
int *ptr = #
上述代码中,ptr
是一个指向整型变量num
的指针。通过&num
可以获取num
的地址,并将其赋值给ptr
。
可以使用解引用运算符*
来访问指针所指向的内存中存储的数据。例如:
int num = 10;
int *ptr = #
printf("%d\n", *ptr); // 输出10
#include <stdio.h>
int main()
{
int a = 10; //向内存申请4个字节,存储10 2**8*4比特
printf("%d\n", &a); //取地址,打印出来是错的,因为d只有4位,而其实有64位或32位
int* p = &a; //指针,p就是指针变量,也是地址
char ch = "w";
char* pc = &ch;
//*p 解引用,通过p这个地址找对对象返回
*p = 20; // *p 就是p指的对象 p是指针变量
printf("%d\n", a);
return 0;
}
上述代码中,*ptr
表示访问ptr
所指向的内存中存储的数据。因此,*ptr
的值为10。
指针还可以进行指针运算,如加法、减法等。例如:
int num = 10;
int *ptr = #
ptr++; // 指针向后移动4个字节(根据指针所指向的数据类型确定),指向下一个相邻的内存地址
上述代码中,ptr++
表示将指针向后移动一个单位,即指向下一个相邻的内存地址。
需要注意的是,使用指针时需要确保指针指向的内存地址是有效的,否则可能会导致程序崩溃或产生未定义的行为。同时,指针也需要及时进行释放,以避免内存泄漏。