C和指针之学习笔记(3)
第8章 数组
1.数组与指针
数组名是一个个元素的地址。
int a[10]; int b[10]; int *c;
(1) c = & a[0]; &a[0]表示一个指向数组第1个元素的指针。
(2) c=a; 与 c = & a[0]; 等价
(3) b = a; 非法,不能使用赋值符把一个数组的所有元素复制到另一个数组,必须使用一个循环,每次复制一个元素。
(4) a = c; 非法,a是指针常量,而c是指针变量。
2. 下标引用和间接访问完全相同。
array[subscript] <==> *(array + (subscript)) (完全等价)
eg:int array[10];
int *ap=array+2;
(1)ap : <==> array + 2 <==> &array[2]
(2)*ap : <==> array[2] <==> *(array+2)
(3)ap [0] : <==> *(ap + (0)) <==> array[2]
(4)ap + 6 : <==> array + 8 <==> &array[8]
(5)*ap + 6 : <==> array[2]+6
(6)*(ap + 6) : <==> array[8]
(7)ap [6] : <==> array[8]
(8)ap[-1] : <==> array[1]
(9)2[array] : <==> *(2+(array)) <==> *(array + 2)
3. 字符串常量的表示
(1) char message1[ ] = “ hello “; // 初始化一个字符数组的元素
(2) char *message2 = “ hello “; //真正字符串常量
指针常量message2 被初始化为指向这个字符串常量的存储位置。
- 4. 数组元素顺序存储
eg : int array [3][6];
数组:
5. int matrix [3][10];
matrix 这个名字的值是一个指向它第1个元素的指针,所以matrix是一个指向一个包含有10个整型元素的数组的指针。
(1)*(matrix +1) :指向整型的指针。子数组第1个元素地址。
(2)*(matrix +1)+5 :第6个元素的地址。
(3)*(*(matrix + 1) + 5 ) :<==> matrix [1][5]
6.指向数组的指针
int vector[10], *vp = vector; //正确
int matrix[3][10], *mp = matrix; //错误
因为,matrix并不是一个指向整型的指针,而是一个指向整型数组的指针。
int (*p) [10]; //声明一个指向整型数组的指针,p是指向整型数组的指针
int (*p) [10] = matrix; //声明+初始化
指向matrix的第1个整型元素:
(1)int *pi = &matrix [0][0];
(2)int *pi = matrix[0];
7.指针的兼容性
(1)int *pt;
int (*pa) [3];
int ar1 [2] [3];
int ar2 [3] [2];
int **p2;
则:
pt = & ar1 [0] [0] ;
pt = ar1 [0] ;
pt = ar1; // 个int值构成的数组
pa = ar1; //都指向int[3]
pa = ar2; //个int构成的数组,而ar2指向2个int构成的数组
p2 = &pt; // 都指向int *
*p2 = ar2 [0]; //*p2类型为指向int的指针,所以和ar2 [0]兼容
p2 = ar2; //个int值构成的数组的指针。
因此,p2和ar2类型不同。
(2)将常量或非常量数据的地址赋给指向常量的指针是合法的。只有非常量数据的地址才可以赋给普通指针。
int *p1;
const int *p2;
const int **pp2;
p1 = p2; //非法,把const指针赋值给非const指针
p2 = p1; //合法,把非const指针赋值给const指针,前提是只进行一层间接运算
pp2 = &p1; //非法,把非const指针赋值给const指针
C和指针之学习笔记(3)的更多相关文章
- 02.C语言关于指针的学习笔记
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...
- 《征服c指针》学习笔记-----统计文本单词数目的程序word_count
1.程序的要求:对用户指定的英文文本文件(包括标准输入),将英文单词按照字母顺序输出到用户指定的文本文件中(包括标准输出),并且在各单词后面显示单词的出现次数. 2.模块设计: 主要分为:1.从输入流 ...
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
数组是一个什么玩意: 数组和指针我的理解,有同样之处也有不同之处.因有同样之处,因此一些资料上说,数组和指针本质是同样的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 同样之处: 数组名 ...
- C和指针之学习笔记(6)
第17章 经典数据结构类型 堆栈 堆栈接口提供三种基本的操作:push.pop 和 top. Push:把一个新值压入到堆栈的顶部. Pop: 只把顶部元素从堆栈中移除,它并不返回这个值. Top: ...
- C和指针之学习笔记(5)
第10章 使用结构和指针 单链表 typedef struct NODE { struct NODE *link; int value; } Node; 插入到一个有序单链表: #include< ...
- C和指针之学习笔记(4)
第9章 字符串 字符串的输入与输出 int ch; char strings[80]; FILE *input; (1)scanf(“%c”,&ch); printf(“%c \n” ...
- C和指针之学习笔记(2)
第6章 指针 1.在一组字符串中查找字符: #include<stdio.h> #include<assert.h> #include<stdlib.h> #def ...
- C和指针之学习笔记(1)
第1章 1.输入字符串 while((ch=getchar())!=EOF && ch!=’\n’) ; ch=getchar() while(ch!=EOF && ...
- C语言学习笔记之成员数组和指针
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下. 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...
随机推荐
- 在iOS开发中如何播放视频
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 如何播放视频 •iOS提供了叫做MPMo ...
- MySql 快速去重方法
1.复制需要去重的表 CREATE TABLE 新表 LIKE 旧表 ; 2.将需要去重的字段 设置为唯一union 索引 ALTER TABLE 表名 ADD UNIQUE(`字段`); 3.复制旧 ...
- 用C++写一个没人用的ECS
github地址:https://github.com/yangrc1234/Resecs 在做大作业的时候自己实现了一个简单的ECS,起了个名字叫Resecs. 这里提一下一些实现的细节,作为回顾. ...
- Linux中等待队列的实现
1. 等待队列数据结构 等待队列由双向链表实现,其元素包括指向进程描述符的指针.每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_quequ ...
- 分布式队列Celery入门
Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具.它是一个专注于实时处理的任务队列,同时也支持任务调度.Celery 是语言无关的,虽然它是用 Py ...
- 关于Java代码优化的35条建议
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- No manual entry for pthread_mutex_init .
$manpthread_mutex_init No manual entryfor pthread_mutex_init 解决方案: $sudo apt-get install manpages-po ...
- Vim的分屏功能
本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 f ...
- 转载--void指针(void *的用法)
转自:jimmy 指针有两个属性:指向变量/对象的地址和长度 但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从 ...
- hive学习(五) 应用案例
1.实现struct数据结构例子 1.1创建student表 create table student( id int, info struct<name:string,age:int> ...