欢迎访问C语言3分钟系列。花3分钟时间,学习或温习一个C语言知识点。今天是第1篇。
今天我们来讨论一下c语言的指针
指针的引入
变量有四种概念其中包含:类型、变量名、内存地址、值。
指针其实就是地址的别名:指针==地址
比如说,我们去女朋友订的酒店,可以通过酒店名(变量名)来寻找或者直接通过酒店的地址来查找两种方式。
以下我们来做个简单的例子:
// 我们可以通过变量名来访问
#include <stdio.h>
int main()
{
int a = 10;
printf("a=%d\n",a);
printf("a的地址是:0x%p\n",&a);
printf("a=%d\n",*(&a));
return 0 ;
}
指针变量的引入
指针变量
什么是指针变量;C语言中存放地址的变量被称为指针变量
怎么利用一个指针变量来访问值:
#include <stdio.h>
int main()
{
int a = 10;
int *p = &a;
printf("通过指针变量访问:%d\n",*p);
return 0 ;
}
其中&为取地址运算符;*可理解为将地址内的值读出的运算符
通过上述代码,我们都能在屏幕中打印出变量a的值
指针变量为什么要求类型
但是,我们发现,我们定义的指针变量类型都是定义的int型,那我们能不能把它改成char型呢?
我们通过代码实验一下:
#include <stdio.h>
int main()
{
int a = 0x1234;
int *p = &a;
char *c = &a;
printf("p = %p",p);
printf("c = %p",c);
printf("a = %x",*p);
printf("a = %x",*c);
return 0;
}
// 结果如下:
// 地址打印出来是一样的
// 通过p指针打印的是1234;
// 通过c指针打印出来的结果为34
//编译运行程序可以看到,通过p指针取a的值能够正确,但是通过c指针,结果却显示不全
造成这样结果的原因是,在取值*运算符会根据指针变量的类型访问不同大小的空间int *型能够访问完整的32个字节(4Byte*8位),而char *型只能访问1个Byte(8位),于是就只能访问到低位2位16进制数字。而高出的24位全部被忽略。
如此我们也可以通过进行自增运算,看看他们相差多少
#include <stdio.h>
int main()
{
int a = 0x1234;
int *p = &a;
char *c = &a;
printf("p = %p",p);
printf("c = %p",c);
printf("p = %p",++p);
printf("c = %p",++c);
return 0;
}
运行结果如下:
通过结果我们发现p指针跨越正好是4个Byte,而c指针是1个Byte
总结
指针就是地址的别称,指针的类型在存放指针时并不会有什么影响,但是在通过*运算符取值时,会根据不同的数据类型分配不同大小的内存空间。如果你希望我更新某个特定小知识,欢迎给我留言。
我是坏柠,聊编程,聊程序员人生。