简单回顾一下指针的概念
内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针)
指针变量可以存放这个地址/指针
注:我们日常所说的指针,一般是指针变量
下面让我们坐上指针进阶的直通车,来到第一站!字符指针
字符指针
代码示例:
int main(){ char ch = 'w'; char* p= &ch; char* pa = abcdef; return 0;}
字符变量ch里面存放了字符w
字符指针p里面存放了ch的地址
指针变量pa里面存放了abcdef字符串的地址,我们并没有对这个字符串进行初始化。而是直接把它放进了指针变量pa里面。
和前两行的字符w不同,abcdef是存储在内存中的只读数据区,无法修改,即便通过指针也无法修改。
为了避免理解出错,我们一般会加上const修饰
const char* pa = abcdef;
const放在*的左边
表示const修饰的指针指向的内容,表示指针指向的内容不能通过指针来改变
但是指针变量本身是可以改变的
const放在*的右边
表示const修饰的是指针变量本身,指针变量的内容不能被修改
但是*pa指针指向的内容是可以通过指针来修改的
代码示例:
int main(){ char arr1[] = abcdef; char arr2[] = abcdef; const char* str1 = abcdef; const char* str2 = abcdef; if (arr1 == arr2) printf(arr1==arr2); else printf(arr1!=arr2); if (str1 == str2) printf(str1==str2); else printf(str1!=str2); return 0;}
它的结果如下:
在例子1里面我们提到过,str1和str2这种情况都指向一个常量字符串
既然字符串abcdef无法被改变,编译器也没有必要创建两个独立的内存空间来存放两个相同的字符串
所以str1和str2的地址是完全一样的
而arr1和arr2是完全不同的数组,它们的首元素地址不一样,打印的结果是不相等
typedef关键字
如何使用:
在msdn中,我们可以查找到typedef的定义
简单地说,typedef的作用就是把一个已有的类型名换一个新的名字
typedef int* pint;
这句代码的意思是:将int*命名为pint
pint在使用的时候和int*完全一致
我们仍然可以使用int*
在结构体里面,我们可以用typedef来缩短原有结构体定义的语句
如:将struct stu命名为stu
typedef和#define的区别
我们同样可以使用#define语句,进行这项操作
#define pint int*
定义语句pint为int*
指针连续定义
先来了解一下如何正确连续定义两个指针
int*pa,*pb;//正确的连续定义int*pa,pb;//错误//pa是int*类型,而pb是int类型
因为这两个的情况非常容易搞混,所以我们不建议连续定义指针
typedef int* pint;#define pint int*int main(){ pint pa,pb;//可连续定义指针 //pa-->int* //pb-->int* pint pa,pb;//等同于int*pa,pb //pa-->int* //pb-->int}
·typedef会产生一个新的变量类型
·#define只是在对应位置进行替换
因为typedef产生了一个新的类型,pint为int*,但与int*也有不同
int pa,pb;//pa,pb都是int类型pint pa,pb;//pa,pb都是int*类型
而我们直接用int*进行连续定义指针变量是错误的
int*pa,pb;//错误//pa是int*类型,而pb是int类型
你学会了吗?我反正是学废了。
浅析S1473X的RDS功能设计及其在车载音响中的实现
微软孙海亮:IC设计上云已具备全球趋势
全球运营商开展的5G部署工作还面临哪些挑战
思特威聚焦新安防应用推出高阶成像系列CMOS图像传感器
如何实时无线监测焦炉交换机的运行数据和状态?
指针的概念
触摸屏控制器设计
“携号转网”到底有没有可能 会面临什么挑战
基于物通博联数据采集网关打造河道水位水质流量实时监测系统
曝有一款诺基亚经典手机将推出复刻版
印度砸40亿美元!惠科前高管担任这座液晶面板厂CEO
第二代Apple Watch还是不能接入移动网络
三星正与中兴多家智能型手机制造商展开行动处理器芯片供给谈判
联想登上全球清洁能源排行榜第11名
高压输电线路遭雷击存在的隐患,防雷措施有哪些?
区块链娱乐生态系统XMax介绍
防爆电气设备防爆标志基础知识
360发布新机,配置全面屏+高通骁龙660,对战苹果
魅族最近真忙,又要发布魅族Flyme6,又要给魅族Note5升降价
四位串行段式液晶显示模块EDM1190A的性能特点和方案设计