C语言之指针基础
1.指针的定义
指针的实质是变量变量,因此指针叫做指针变量。
指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
2.指针的理解和使用
#include <stdio.h>
int main(void)
{
int a=6;
//指针的定义
int *p1; //定义指针变量p1,p1指向一个存有int类型数据的地址
char *p2; //定义指针变量p2,p2指向一个存有char类型数据的地址
short *p3; //定义指针变量p3,p3指向一个存有short类型数据的地址
double *p4; //定义指针变量p4,p4指向一个存有double类型数据的地址
//指针与变量地址关联
p1=&a; //p1与a的地址关联起来,p1指向a
//指针解引用
*p1=3; //(*p)就表示p1指向的地址存的值,这里即为a存的值
}
使用步骤:
(1). 指针定义
(2). 指针与变量地址关联
(3). 指针解引用
3.与指针有关的符号
3.1指针定义使用过程中的符号
#include <stdio.h>
int main(void)
{
int a=6,b=0;
int *p1; //*表示定义了一个指针,这个指针的名字叫p1
p1=&a; //&是取地址符,表示取变量a的地址,p1实质是地址,&a也是地址,因此此关联正确
b=*P1; //这里的*是解引用,表示指针p1指向的变量存储的值,上一步p1与a的地址关联起来了,因此*p1的值为6
}
3.2 a,a[0] ,&a ,&a[0]符号的含义
#include <stdio.h>
int main(void)
{
int a[5];
}
如上述定义,讨论a a[0] &a &a[0]符号的含义
必备理论:C语言中的左值与右值https://blog.csdn.net/m0_46672658/article/details/115384413
(1)a就是数组名。
a做左值时表示整个数组的所有空间,又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;
a做右值表示数组首元素的首地址。a做右值等同于&a[0];
(2)a[0]表示数组的首元素。
a[0]做左值时表示数组第0个元素对应的内存空间;
a[0]做右值时表示数组第0个元素的值。
(3)&a就是数组名a取地址,是数组的地址。
&a不能做左值;
&a做右值时表示整个数组的首地址。
(4)&a[0]是数组首元素的首地址。
&a[0]表示数组首元素首地址,是个常量所以不能做左值;
&a[0]做右值时就表示数组首元素首地址的值,等同于a做右值。做右值时&a[0]等同于a。
4.指针与数组
指针访问数组的方法
#include <stdio.h>
int main(void)
{
int a[4]={1,2,3,4};
int *p;
p=a;
//p=&a[0];
//p=&a; //报警告assignment from incompatible //pointer type [enabled by default]
printf("a[0]=%d\n",*p);
printf("a[1]=%d\n",*(p+1));
printf("a[2]=%d\n",*(p+2));
printf("a[3]=%d\n",*(p+3));
printf("a[4]=%d\n",*(p+4));
return 0;
}
5.指针与传参
函数传参时,形参是可以用数组的,函数形参是数组时,实际传递是不是整个数组,而是数组的首元素首地址。即函数传参用数组来传,等价于传递的是指针(指针指向数组的首元素首地址)。
以上内容源于朱有鹏《c语言内核深度解析》学习笔记和网络,如有侵权,请告知删除。