对于数组和指针的理解
来源:互联网 发布:vasp软件 编辑:程序博客网 时间:2024/09/21 09:20
对于数组和指针,我觉得谭浩强老师的这部分讲得比较详细,他的书我觉得是是入门快的好书。
一、
对于一个int a[ 3 ] [ 4 ]的二维数组
我们这样理解:1、a,a+1。。。都是行地址。(凡是不带*和【】为行地址)
2、*a,*(a+1)。。。都是列地址,等价于a[ 0 ],a[ 1 ],这都是第X行第一列的地址,*a:第一行第一列地址
*(a+1)是第二行第一列的地址。(凡是带*和【】全都理解为列地址)
3、*(a+1)+2表示第二行第三列,与a[ 1 ][ 2 ]等价
4、对于行地址的计算a+1,1代表一行,一行相差四个整型数据,两行地址会相差16。
对于列地址计算*(a+1)+1,最后这个1代表列数,列列之间差一个字节,两列地址相差4。
小结:对于二维数组在内存中的存储为按行依次存储,可展开看成一个一维的数组。
int *p=a[0],(int *p=a也可以),可以for(p=a[0];p<12;P++)printf(“%d”,*p);
举例:对a[ 1][2]的地址可表示为:
*(a+1)+2;a[ 1 ]+2 ; &a[ 1 ] [ 2 ];&a[ 0 ] [ 0 ]+1*4+2;
5、对于int *p和 int (*p)[4] 的比较
int *p = a[0]; 指向数组元素的指针变量。
int (*p)[4] = a;指向m个元素组成的一维数组的指针变量。
看红字可以知道,Int *p ,可以指向任意一个元素
而int (*p)[4] ,p不能指向一维数组的中的第J个元素,只是一维数组的首地址。
讨论:初始化问题: int *p=a【0】 ,p可以看成 展开一维数组的首地址(列地址),
哪个元素就是*(P+i) 。int *p=a;效果一样。
int (*p)【4】=a;p就是行地址,对于每个元素*(*(P+i)+j)。
(*p)[4] = a【0】和int *p=a也可以,虽然a和a【0】值是相等的,定义的P是指针类型,默认四个字节,与初始化关系不大,只要地址一样即可。
二、
指针的与数组不等价
看了一点c专家编程,把感受整理一下。
一般的数组,指针的形参和实参的变换可以。
对于两个文件中,一个文件中定义数组int mango【100】,另一个文件引用他的话
extern int *mango ,对吗?*mango表示这个数组的第一个值。 应该为extern int mango[ ]; 这里不可
替 换 。
- 对于数组和指针的理解
- 对于数组和指针的理解
- 对于数组与指针的理解
- 对于数组指针—指针数组;函数指针—函数指针数组,指向函数指针数组的指针,的理解
- 嵌入式 对于指针和数组的问题
- 数组指针和指针数组的理解
- 个人对于数组和缓冲区的理解
- 数组和指针的理解
- 指针和数组的理解
- 对于数组的理解
- 对于数组和指针运算
- 对于结构体指针+、-常数的理解(page_to_pfn和pfn_to_page)
- 对于结构体指针+、-常数的理解(page_to_pfn和pfn_to_page)
- 对于C++中引用和指针的理解
- 理解数组指针和指针数组的区别
- C语言:数组指针和数组指针的理解
- 对于树状数组的理解
- 数组和指针的一些理解
- 匆匆
- sql server bcp命令
- 关于在asp.net调试时断点处不中断的问题
- 转贴 c程序设计大赛
- 90度的爱情,180度的转身
- 对于数组和指针的理解
- Oracle存储过程(转)
- 从今天开始,我要尝试每天进步百分之一!
- 常见C/C++笔试题目整理(含答案)1
- 常见C/C++笔试题目整理(含答案)2
- 常见C/C++笔试题目整理(含答案)3
- java学习
- 既然来了
- Java基础:第三十四讲 包