程序猿之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)
2014-11-07 20:09
477 查看
主要内容:二维数组和指针,&*a[i][0]的理解、数组1[e]和e[1]
#include <stdio.h> #define NUM_ROWS 10 #define NUM_COLS 10 int main(int argc, char **argv) { int a[NUM_ROWS][NUM_COLS], *p, i = 0; // a理解为指向整数指针的指针 即int ** int c, d=2,*test, e[2] = {4,5},f[2][2] = {{11,22},{33,44}}; // e理解为int * test = &d; // c = *&test; //和&(*test)结果一样,*和&同一优先级,按右到左 c = &*test; // 注意和++*test的差别,这里有点不懂,为什&(*test)不出错,我 // 感觉是*test等效于d,而不是具体的数值,然后&(*test)相当于&(d) // 所以才印证下面在指针操作时&和*可取消 // c = ++*test; printf("1[e] = %d\n",1[e]); // 1[e] 和 e[1] 一样,因为对编译器而言e[1] 等价于*(e + 1)==>*(1 + e) // 则等价于1[e] ,但良好编程习惯不要这样写 printf(" c = %d\n",c); printf(" d的地址为 = %d\n",&d); // test = &*e[0]; // 这句出错(*&e[0]编译通过但是运行出错),指针才可以&和*取消,e[0]是常数, //下面f[1] 表示第二行 // printf(" 常数d = %d\n",*test); test = &*f[1]; printf(" d = %d\n",*test); for(i = 0; i < NUM_ROWS; i++) { /* 使p指向二维数组的某一行用p = &a[i][0] 等价于p = a[i] * C语言中二维数组按行存储 * 数组下标与指针算术运算间的神奇公式 * 对任意数组a, a[i]等价于*(a+1) . * 因为&和*可以取消,则&a[i][0]等价于&(*(a[i]+0)) ==>等价于&*a[i] ==>a[i] */ for(p = a[i]; p < a[i] + NUM_COLS; p++) { *p = i; printf("%3d ",*p); } printf("\n"); } return 0; }
输出:
相关文章推荐
- 程序猿之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
- 程序猿之---C语言细节12(指针和数组细节,"//"的可移植性说明)
- 程序猿之---C语言细节29(#define宏大小、空结构体大小、柔性数组不知道你见过没)
- 直观理解C语言中指向一位数组与二维数组的指针
- 程序员之---C语言细节12(指针和数组细节,"//"的可移植性说明)
- C语言 字符数组和字符串指针的理解
- 在c语言学习中的问题(一):数组指针,指针数组,二维数组的理解与区分
- 程序猿之---C语言细节30(数组和指针操作测试题,你能全答对吗??)
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
- 程序猿之---C语言细节30(数组和指针操作测试题,你能全答对吗??)
- 字符串数组&字符指针理解(一)
- 理解C语言指针和数组的关系的代码
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- C语言笔记->通过指针引用数组
- 理解C语言 第25课 指针数组与数组指针的分析
- 关于一维数组、二维数组、一级指针、二级指针、指针数组、数组指针、空指针、字符指针、const的个人理解
- C语言——结构体与指针引用&结构体数组与指针引用
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言中的指针数组与数组指针
- 深入理解C语言的指针*和引用&