C语言指针 - 小记
C语言提供了指针变量,能够通过指针,指向同类型的变量,进行一些譬如移位等的操作。
1.从概念本身理解指针的性质
a)指针初始化,指针赋值:
通常,指针有两种定义方法,如下所示:
第一种:
int *p; //初始化先不赋值
p=&a; //后面在取地址符,达成指向
第二种:
int *q=&a; //在初始化就完成指向
b)指针的内容:
请记住,指针变量内存储的一定是指针所指向的变量的地址!打个比方,假如被指的那个变量a是一个房子,若存在指针变量*p指向了a,那么指针变量p就相当于是一个盒子,盒子里装的是啥东西?是这个房子所在的位置(地址)。如下所示:
/* 指针变量中,存储的是指向的变量的地址符; */
int c1=&a;
int c2=p;
printf("%d\n",c1);
printf("%d\n",c2);
//可以看到c1和c2输出结果一样,说明指针里面存的就是指向的变量的地址~
输出演示结果:
c)不同指针,指向同一个变量?
p和q正如“例a)”所编辑的,指向了同一个int型变量a,而它们作为两个都指向了a的指针,输出其所指向的肯定是一个结果。即有:
/* p和q是两个不同的指针,都指向了变量a */
int x1=*p;
int x2=*q;
printf("(*p) = %d\n",x1);
printf("(*q) = %d\n",x2);
//可以看到x1和x2输出结果一样,因为指向的是同一个变量~
注意: 带上*号的*p和p本身是两个不同的东西!
指向了同一个int型变量的指针p和q,他们作为变量所储存的都是变量a的地址,即有:
int b1=p;
int b2=q;
printf("p = %d\n",b1);
printf("q = %d\n",b2);
//可以看到b1和b2输出结果一样,因为他们存的都是所指向的变量a的地址~
当然,两个指针p和q它们本就不是同一个“盒子”,只是都指示了变量a的所在的两个不同的指针变量,他们各自的地址自然肯定是不同的,如下所示:
int b3=&p;
int b4=&q;
printf("&p = %d\n",b3);
printf("&q = %d\n",b4);
//可以看到b3和b4输出不同,
//因为是两个不同的指针,指针自身的地址肯定不一样~