C语言中,关于指针的一些说明:
- 在使用它来存储任何变量地址之前,我们必须声明一个指针。
- 指针变量可能属于任何数据类型,例如 int、float、char、double、short 等。
- 普通变量存储值,而指针变量存储变量的地址。
- C 指针(地址)的值总是一个整数。
- 首先,C指针总是被初始化为null,例如:int *p = null。空指针的值为 0。如果 C 中的指针被赋值为 NULL,则表示它没有指向任何内容。
- 符号用于获取指针指向的变量的值。
- 可以将两个指针相减以了解这两个指针之间有多少元素可用。但是,指针加法、乘法、除法是不允许的。
- 任何指针的大小都是 2 字节(对于 16 位编译器)。
C语言空指针
在声明时,如果我们没有在指针中指定任何地址,那么我们可以分配 NULL 值。
当指针未分配任何值时,它被称为空指针。
未分配任何值但为 NULL 的指针是 int \*p=NULL
;
在大多数库中,指针的值为 0(零)。
C语言中,指向指针的指针
借助指向指针变量的指针,我们可以存储指针变量的地址。
这个地址指向一个变量的值。
指向指针变量的指针的一般格式:
data_type **p2;
指向指针变量的指针示例:
在这个例子中,我们在变量中分配了一个值。
我们已经定义了指针变量,它存储了那个变量的地址。
我们还定义了一个指向指针变量的指针,它存储指针变量的地址(变量的值)。
#include <stdio.h> #include <stdlib.h> int main() { int variable=100; int *p1;// 指向int数值的指针 int **p2;// 指向指针的指针 p1=&variable;// 保存x变量的地址; p2=&p1; // 获取p1变量的地址;p1是一个指针 printf("x变量所在内存的地址: %d \n",&variable); printf("p1变量保存的值: %d \n",p1); printf("*p1变量的值 is %d \n",*p1); printf("p1所在内存的地址: %d \n",p2); printf("p1变量保存的值 %d \n",*p2); printf("**p2变量的值 %d \n",**p2); return 0; }
输出示例:
x变量所在内存的地址: 6422084 p1变量保存的值: 6422084 *p1变量的值 is 100 p1所在内存的地址: 6422072 p1变量保存的值 6422084 **p2变量的值 100
在C语言中,指针是其值是另一个变量的地址的变量。
C语言指针语法:
data_type *var_name;
C语言指针示例:
int *p; char *p;
这里,*用于表示它是一个指针变量不是普通变量。
借助 C 指针,我们可以轻松地执行一些 C 编程任务,例如动态内存分配,而这些任务如果不使用指针就无法执行。
因此,学习指针成为一个完美的 C 程序员变得很有必要。
C语言 指针算术
C 指针保存值的地址。
这就是为什么我们可以对指针变量执行一些算术运算。
以下是常用的 C 指针算术列表:
- 增量
- 递减
- 加法
- 减法
- 比较
C 指针算术示例:
指针加法:
让我们看一个在指针类型变量中添加一些值的示例。
描述:
我们在一个变量中分配了一些值,而地址则存储在一个指针类型的变量中。
然后我们在指针类型变量中添加了一些值。
#include <stdio.h> int main() { int number=10; int *pointer; // 指向int类型的指针 pointer=&number; // 保存变量number的地址 printf("变量pointer的地址是%u \n",pointer); pointer=pointer+45; printf("\n地址添加45之后 %d \n",pointer); return 0; }
输出示例:
变量pointer的地址是 6422084 地址添加45之后 6422264
1个int是4个字节。 所以添加45个字节后: 4*45 = 180 = 6422264- 6422084
指针减法:
让我们看一个从指针类型变量中减去某个值的示例。
描述:
我们在一个变量中分配了一些值,而地址则存储在一个指针类型的变量中。
然后我们从指针类型变量中减去了一些值。
#include <stdio.h> int main() { int number=10; int *pointer; // 指向int类型的指针 pointer=&number; // 保存变量number的地址 printf("变量pointer的地址是%u \n",pointer); pointer=pointer-5; printf("\n地址减去5之后 %d \n",pointer); return 0; }
指针递增:
让我们看一个指针类型变量值递增的例子。
描述:
我们在一个变量中分配了一些值,而我们将它们的地址存储在一个指针类型的变量中。
然后我们完成了指针类型变量值的预增。
pointer=++pointer;
指针递减:
让我们看一个指针类型变量值递减的例子。
描述:
我们在一个变量中分配了一些值,而我们将它们的地址存储在一个指针类型的变量中。
然后我们就完成了一个指针类型变量的值的预减。
pointer=--pointer;
指针比较
让我们看一个比较两个指针类型变量的例子。
描述:
我们在两个变量中分配了一些值,同时我们将它们的地址存储在两个指针类型的变量中。
然后我们就完成了两个指针类型变量的比较。
#include <stdio.h> int main() { int variable_1=10; int variable_2=20; int *pointer_1,*pointer_2; pointer_1= &variable_1; pointer_2= &variable_2; if(pointer_1 > pointer_2) printf("参数1的地址大于参数2"); else printf("参数1的地址小于参数2"); return 0; }
C语言 指针的声明:
c语言中的指针可以用*(星号)来声明。
int *variable_1; // 指向 int 的指针 char *variable_2; // 指向 char 的指针 float *variable_3; // 指向 浮点数 的指针
C语言指针示例
下面是使用指针找出变量的地址的简单示例。
#include <stdio.h> int main() { int x=10; int *p; // & 符号用于获取变量的地址 p=&x; printf("变量x的地址是:%d \n",&x); printf("变量x的地址是:%d \n",p); printf("x变量的值 %d \n",*p); return 0; }
输出示例:
变量x的地址是:6422084 变量x的地址是:6422084 x变量的值 10