详解指针(1)
- 什么是指针
- 指针类型
- 指针运算
- 指针类型
1 指针
在生活之中,我们每个人的家中都有门牌号,而正因为有了门牌号我们才能够正确而快速的找到自己的家,这个门牌号就相当于我们的地址。而在C语言之中也有这么一种东西----地址,我们可以通过地址找到存储在该内存单元的数据,在C语言中地址也叫指针。
我们可以这么理解 地址=指针=内存单元的编号。
2 指针类型
c语言中的指针类型有
char* arr //字符指针
int* i//整型指针
int* arr[10]//指针数组
int (*arr)[10]//数组指针
int (*arr)(int x,int y)//函数指针
int (*arr)[x]() //函数指针数组
2.1 指针类型的意义
指针类型的大小都是一样的,在x86或者x64的环境中分别为4、8个字节,而指向类型的不同则决定了指针的操作空间的大小,如果你用char则意味着你只能操作一个字节若是int则能够操作四个字节,代码如下
字符指针
#include <stdio.h>
int main()
{
int n = 0x11223344;
char *pc = (char *)&n;
*pc = 0;
return 0;
}
整型指针
#include <stdio.h>
int main()
{
int n = 0x11223344;
int *pi = &n;
*pi = 0;
return 0;
}
也就是说虽然空间大小相同,但能调用的范围却并不相同也可以理解成操作的权限并不相同。
3 指针运算
指针既然存放的地址,那么指针-指针是什么呢,接下来我将为大家讲解指针减指针的结果
如图所示,上图中的00000A为十六进制数字,转为十进制则为10,而这则恰好为a与a+10之间元素的个数
如图所示
3.1 指针加减整数
由图中我们可以看出char*+1只移动了一个字节,而int*+1移动了四个字节,所以指针的类型决定了指针一步走了多大。
4.const修饰符
const修饰符是指将其修饰的数据变成常量,从而起到不能修改保护数据的作用。那么它与指针结合又意味着什么呢?
用const修饰指针分别有以下几种情况
int* const p
const int* p
const int* const p
而这三种也有不同的含义
首先是const int* p意味着不能修改p的值但能改变地址
void test()
{
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//**报错 表达式必须是可修改的左值**
p = &m;
}
int* const p 不能修改地址但能修改它的值
void test1()
{
int n = 10;
int m = 20;
int* const p = &n;
p = &m;//**报错 表达式必须是可修改的左值**
*p = 20;
}
const int* const p 则是既不能修改地址也不能修改值
void test4()
{
int n = 10;
int m = 20;
int const* const p = &n;
*p = 20; //**报错 表达式必须是可修改的左值**
p = &m; //**报错 表达式必须是可修改的左值**
}
本篇介绍到此结束 如果对您有所帮助的话可以一键三连哦 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
标签:10,const,int,修饰符,地址,20,指针 From: https://blog.csdn.net/2301_80103660/article/details/136724888