C_learning_notes_array

learning_notes_array

  1. 数组名?你真的了解吗?
  • e.g. int a[10]; 数组名a是指向数组第一个元素的地址,类型取决于数组元素的类型。
  • 如何理解数组名是一个常量? 不可随意修改。一般来说,在创建数组后,编译后自动为数组分配一个内存地址。当程序运行时,是不可改变内存地址的。
  1. 数组元素的访问——下标引用 or 指针间接访问?
  • C语言中,二者等价。
  • 什么意思?举个栗子你就明白啦!a[x] 等价于 *(a + x),(这里x是任意一个常数)。
  • so? 下面两个ap[0]、ap[-1]都是合法的!
int array[10];
int *ap = array + 2;

ap[0];      //等价于*(ap+0)即array[2]
ap[-1];     //等价于*(ap-1)即array[1]
  • 你以为这就结束了? 不!2[array]这个也是合法的,没想到吧!2[array]等价于*(2 + array)。但是从可读性角度来讲,应该避免这样写。
  1. 指针引用和下标引用的效率对比
  • 指针和下标引用效率相同
a = get_value();

/*下标引用*/
array[a] = 0;

/*指针引用*/
*(array+a) = 0;
  • 指针效率高于下标引用
/*下标*/
int array[10], a;
for(a=0; a<10; a++){
    array[a] = 0;
}

/*指针*/
int array[10], *ap;
for(ap=a; ap<array+10; ap++){
    *ap = 0;
}
  • 指针误操作会出现效率低下情况。
  1. 作为函数参数的数组名
  • 形式可以是:int array[] 或者 int *array
  • 传址调用体现在:当你对指针间接引用时会修改原本的数组元素
  • 传值调用体现在:传递给函数的是指针的拷贝,你可以修改指针而不必担心对于的作为实参的指针。
  • 对于多维数组而言,必须告诉编译器数组的维度,因此形参的形式为: int (*mat)[10]或者 int mat[][10]
  1. 数组初始化
  • static静态初始化:只初始化一次
  • auto自动初始化:每次进入作用域时都会初始化一次
  • 不完整初始化:数组未赋值的元素自动初始化为0
  1. 字符串和字符数组
  • char message[] = {'H','e','l','l','o',0};

  • char message[] = "Hello";

  • 上述两种写法是等价的,都是声明的一个字符数组

  • char message[] = "Hello";

  • char *message = "Hello";

  • 上述两种写法意义不同,第一种是字符数组,而第二种则是字符常量。

  1. 多维数组的存储顺序
int matrix[6][10];
int *mp;
mp = &matrix[3][8];
  • 对于*mp 表示 matrix[3][8];
  • 对于*++mp 表示 matrix[3][9];
  • 对于*(mp+2) 表示 matrix[4][0];
  1. 多维数组名
  • matrix实际就是第一个元素的地址,也是指向第一个数组单元的地址,即matrix[0][0]的地址
  • matrix+1表示指向下一个数组单元的地址,即matrix[1][0]的地址,*(matrix+1)表示第二个数组单元的第一个数,即matrix[1][0]
  • *(matrix+1)+5表示matrix[1][5]的地址, 而*(*(matrix+1)+5)表示matrix[1][5]
  • *(*(matrix+1)+5)等价于*(matrix[1]+5)
  1. 多维数组的指针操作
  • int matrix[3][10]; *mp = matrix;是非法的
  • 原因是:matrix是一个指向整型数组的指针,而mp是一个指向整型变量的指针。修改:int (*p)[10] = matrix;这样才合法, p指向matrix的第一个数组单元(指向matrix的第一行)
  • int *p1 = &matrix[1][0]; int *p2 = matrix[1];两者相等价
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值