C语言的语法简单 , 规则也不复杂 , 所以很多初学者在刚接触C语言的时候 , 往往会觉得“C语言不过如此” 。但这种感觉一般只持续到C语言的“指针”语法 , 之后就会被各种指针概念(指针、指针指针、数组指针、指针数组等)搞糊涂 。).
文章插图
文章插图
被各种指针概念弄昏了头被各种指针概念搞糊涂了
「数组指针」能给C语言程序带来什么好处?C语言的指针语法本身并不难 , 但由此衍生出来的“各种指针”往往让很多初学者感到困惑 。不止一个读者曾经问过我“指针数组”和“数组指针”的区别 。不过经常看我文章的朋友应该可以自由指出两者的区别:“指针数组”是存储指针元素的数组 , 不是数组 。而“数组指针”是数组指针 , 不是指针 。
但是 , 不知道读者有没有想过 。C语言程序开发中“数组指针”是什么意思?一个简单的指针就足够了 。为什么要用这么混乱的指针?
在C语言程序开发中 , 程序员可以定义这样的指针:
char(* p)int main(){ char(* p)[10];char arr[5];p = & amparr返回0;}编译这段代码 , 会得到指针类型不匹配的警告信息:;分析这一行C语言代码很简单 , 而且()的优先级更高 , 所以*p首先说明它是指针 , char [10]的其余部分说明p是10字节数组类型的指针 。换句话说 , 指针p指向一个包含10个char类型元素的数组 。
文章插图
文章插图
【数组是一个什么 什么是字节型数组】C语言的数组指针有什么用?C语言中数组指针有什么用?
像这样声明指针p的好处是 , 如果你试图给p赋另一个长度(不是10字节)的数组地址 , 编译时会给出警告信息 。以下是测试C语言的代码 , 请看:
[10]
文章插图
文章插图
指针类型不匹配指针类型不匹配
一些稍有开发经验的C语言程序员应该已经定义了以下函数:
void fun(char *p , int len);参数len用来描述指针p索引的内存长度 , 显然不能保证传递给fun()函数的内存长度等于预期值 。如果fun()函数的开发者期望传递给fun()函数的指针p index的内存长度是10 , 那么他只能希望他的同事严格遵守开发者的意图(这并不容易) 。毕竟 ,
乐趣(p , 9);趣味(p , 110);都是合法的 , 这样的函数调用编译器不会产生任何错误或者警告信息 。如果用数组指针定义fun()函数 , 情况就不一样了 。相关的C语言代码如下:
void fun(char(* p)[10]);这种定义方式强制fun()函数的调用者传递一个指向指定长度内存的指针 , 否则编译器会发出警告或错误消息 。
- lamer的昵称 lamer怎么念
- 怎么把照片从一寸变成两寸 两寸证件照尺寸是多少
- 偷香高手无删减全文小说 有没有类似金麟岂是池中物的小说
- M外套是多大尺码 衣服m号是多大
- 高速路肩是什么意思?路肩与应急车道的区别在
- 双人沙发尺寸是多大,双人沙发的规格 好嘛
- 包装袋有什么材料,epe是什么材料
- 彡含义,人彡是什么字
- 羊角蜜凉性还是热性 羊角蜜里面的籽能吃吗
- 吃一个榴莲相当于吃几只鸡 吃一个榴莲会不会长胖