一、基本概念
1.1定义
指针实质上是一个变量,只不过这个变量储存的是另一个变量的内存地址。这个内存地址代表了计算机内存中存放数据的具体位置。有了指针我们可以直接访问这些数据。
形象一点的表示,旅馆中的一个个的小房间相当于我们计算机的内存单元格,而每个房间的房间号相当于每个内存单元格的地址,有了房间号我们可以快速的找到房间中的客人,有了地址我们就可以快速的访问调用单元内存格中的数据。
1.2声明和初始化
1. 声明指针变量:
在C语言中,我们使用 * 符号来声明一个指针变量,例如,“int *p;”表示声明 一 个指向整型的指针变量p。
2. 初始化指针变量:
指针变量可以在定义时就被初始化,也可以在定义后再进行初始化。
- 我们可以在定义指针变量的同时对其进行初始化,并将某个已存在变量的地址赋予它。例如,“int a = 10; int *p = &a;”这个例子中,我们在定义指针变量p的同时将其初始化为指向变量a的地址。
#include<stdio.h>
int main()
{
int a=10;
int*p=&a;
}
注意事项:
1、指针的大小由cpu的寻址位数决定,若为32位则指针大小为4字节,64位则为8字节
2、char占用1字节,int占用4字节
3、&用于获取地址变量,*用于声明指针
二、指针与数组
1.1数组元素的指针
所谓数组元素的指针就是数组元素的地址
int a[20];
则数组 a 一共有 20 个数组元素,每个数组元素中可以存放一个整型数据,占两个字节。数组 a 在内存中一共占据 40 个字节的连续存储空间。
#include<stdio.h>
int main()
{
//我们可以用一个指针变量指向一个数组
int a[5]={1,2,3,4,5};
int *p; //定义p为指向整型变量的指针变量
p=&a[0]; //把a[0]的地址赋给指针变量p
{
在c语言中,数组名不代表整个数组,只代表数组首元素的地址,且数组的首元素从0开始。因此下面的等式是等价的。
p=&a[5];
p=a;
int *p;
p=&a[0]; //不可以写成 *p=&a[5];
int*p=a;
1.2在引用数组元素时的指针运算
当指针指向数组时我们可以进行一些运算。加一个整数,如p+1;减一个整数,如p-1;自加运算,如p++,++p;自减运算,如p--,--p;两个指针相减,p1-p2;
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。注意:执行p+1时并不是将p的值(地址)简单地加1,而是加上一个数组元素所占用的字节数。例如,数组元素是float型,每个元素占4个字节,则p+1意味着使p的值(是地址)加4个字节,以使它指向下一元素。p+1所代表的地址实际上是p+1xd,是一个数组元素所占的字节数(在Visual C中,对int型,对 float和long型,d=4;对char型,d=1)。若p的值是2000,则p+1的值不是2001,而是2004。
*(p+i)或*(a+i)是p+i和a+i所指向的数组元素。即:*(p+5),*(a+5),a[5] 三者等价
C语言指针基础:定义、初始化与数组操作

被折叠的 条评论
为什么被折叠?



