想要了解指针的概念,首先要了解变量在内存中是如何存储的。
创新互联是一家专注于网站设计、网站制作与策划设计,西峡网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:西峡等地区。西峡做网站价格咨询:18980820575int a=3; //这行代码的意思是,首先在计算机的随机区域开辟一个地址,连续四个字节的空间,把整数3存放在这个连续的空间上
a代表了这个空间的首地址,但a自身不是地址类型。
变量在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像楼房每层的房间都有自己的门牌号一样。
总的来说,指针就是地址。但是我们平时说的指针其实指的是指针变量。指针变量就是一个存放地址的变量。
指针的类型在我们定义一个变量的时候,要确定它的类型。就像 int i、char c、float f 一样,在定义指针变量时也是一样的,必须确定指针类型。
int 型的指针需要用 int 类型的指针存储,char 型的指针需要用 char 类型的指针存储。
* 和 &int *p; //定义了一个整型的指针变量
char *q; //定义了一个字符型的指针变量
学习指针的时候,我们会很频繁的看见 * 和 & 这两个符号,根据我们对c语言运算符号的了解,知道 * 是乘法运算符,& 是按位与运算符,但是这两个符号与指针一结合它们各自所代表的含义就会发生变化,
& : 在运算时是表示按位与运算,但是在指针相关的语句中使用是取直接地址的意思,取直接地址就是取数据存放的首地址。例:int i=3; &i 的含义是取变量 i 的地址。
* : 有三层含义,在运算时表示乘法,在与指针相关的语句中使用时会有两种用法,一种用法是定义时,表示的是数据类型——地址类型,另一种是在使用时,表示的是取间接地址:就是取地址中的数据。例:int *p;int i=3; p = &i; p 为 i 的地址,*p 则为通过 i 的地址,获取 i 中存放的内容。
代码示例:
int a=3; //定义了一个 普通变量 a
int *p; //定义了一个指针变量
p = &a; //通过取地址符 &,获取 a 的地址,把地址赋值给指针变量
printf("%d\n", *p); //通过 间接寻址符 *,获取指针指向的内容
指针的定义指针变量的定义格式为:数据类型 *指针名;
例如:下面分别定义了 int、float、char 类型的指针变量。
int *p;
float *q;
char *c;
如上面的定义,指针变量名为 p、q、c。并不是 *q、*q、*c。
代码示例:
void point(void)
{
int* p;
int a[3] = { 1,2,3 };
p = a; //指针指向数组 等价于 p=&a[0],因为数组名称代表了数组首个元素的地址,地址是一种数据类型用 * 表示。
p++; // p++ 表示指针指向下一个元素。
char c[3] = { 'a','e','s' };
//p=c; //这样是错误的,p 指向的是整型数据,c 是字符型数组,此时执行 p++,将指向字符型数组的第四个元素。
char* f;
f = c; //定义一个字符型指针,指向字符型数组。
(char*)p = c; //数据类型的强制转换。 p 本来是整型指针,(char*) 把 p 强制转换成字符型指针,就可以指向字符型数据了。
}
指针的输入代码示例:
void point1(void)
{
int* p;
int a;
a = 3;
p = &a;
scanf_s("%d", p); //等价于 scanf("%d", &(*p)); 这里的 * 是取间接地址,取的是 p 中存放的数据,& 是取数据的地址。
}
指针的输出代码示例:
void point2(void)
{
int a;
int* p;
a = 3;
p = &a;
printf("%d", *p);// * 是取间接地址,printf 输出的是 p 里的数据。
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧