二维数组中的指针加法计算 与 初始化
2017-11-09 10:01
363 查看
二维数组中的指针加法计算
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a[3][4] = { {}, {1,2,3,4} }; //int[4] a[3] T[3] a //整体上来说 printf("sizeof(a)=%d sizeof(int[3][4])=%d\n", sizeof(a),sizeof(int[3][4])); //3X4X4=48 //int[4] a[3] 元素访问 printf("sizeof(a[0])=%d sizeof(int[4])=%d\n", sizeof(a[0]), sizeof(int[4])); printf("==============================================\n"); #if 0 int[3][4] 1.首先 没加1的时候 他们的地址都是相同的,因为存放的物理结构是线性的 2.但是 他们代表的层次是不一样的 二维数组的名字a代表层次是行 也是首元素的首地址 因为是二维数组 所以这里的首元素是第一行整体 3.加& 理解为升* 二维数组的元素是一维数组 a[0]代表的层次就是一维数组 进行升*后 &a[0]就达到了二维数组的层次 #endif printf("a=%p\n", a); printf("&a=%p\n", &a); printf("&a[0]=%p\n", &a[0]); printf("a[0]=%p\n", a[0]); printf("&a[0][0]=%p\n", &a[0][0]); printf("---------------------------------------------\n"); printf("a+1=%p\n", a + 1); //a为二维数组的行的层次 对它+1后加的是 一行的大小为16 printf("&a+1=%p\n", &a + 1);//对a升*后 变成整个二维数组的层次 +1 加的是整个二维数组大小 为48 printf("&a[0]+1=%p\n", &a[0]+1);//对a[0]升* 后变成二维数组的行的层次(与a相同) 所以+1的大小为16 printf("a[0]+1=%p\n", a[0] + 1);//a[0] 为一维数组的层次 +1 加的一维数组之间的大小 为4 printf("==============================================\n"); printf("a[1]=%p\n",a[1]); //二维数组第二行的地址 可以由 a+1 或 &a[0]+1 得到 printf("a[1]+1=%p\n", a[1] + 1); //这个加1加的是4 为a[1]数组的步长 所以为4 return 0; }
二维数组的初始化
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { //行缺省初始化 int b[3][4] = { {1}, {2,2}, {3} }; //全局缺省初始化(统一先排第一行) int c[3][4] = {1,2,2,3}; //全部初始化 int a[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d\t", a[i][j]); } putchar(10); } printf("----------------------\n"); //二维数组行可以省略 而列不能省略 int d[][4] = { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 }; for (int i = 0; i < sizeof(d) / sizeof(d[0]); i++) //利用sizeof求行数 size(d[0])可以想为int[4] { //相当于用二维数组总长度 除以 一行的长度大小 for (int j = 0; j < 4; j++) { printf("%d\t",d[i][j]); //\t表示俩数之间空一大格子 } putchar(10); //换到下一行 printf("\n"); } return 0; }
相关文章推荐
- 指针数组的初始化方式和和用二维数组做形参
- 一维数组、二维数组和指针的相关计算
- 编写一个C#程序,要求定义一个行数和列数相等的二维数组, 并执行初始化,然后计算并输出数组两条对角线上的元素之和。
- 一维数组和二维数组的创建、初始化、使用、存储、指针访问
- 二维数组指针的定义和初始化
- java 二维数组的初始化和长度计算
- 一维数组、二维数组、字符数组、指针 相关的 sizeof 计算
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- 数组的初始化和二维数组、指针与数组
- 动态开辟二维数组,初始化二维数组指针
- nature (加法计算 多参数变为单一参数)
- 例看二维数组,指针,二维数组指针
- 利用指针传递二维数组进行行列式转置
- 指针的指针,数组与指针,二维数组里指针的走位,爱心代码
- [转]二维数组和二级指针的传递问题
- C Language Study - 错误的指针初始化方式
- 让一维指针指向二维数组空间的方法!
- 二维数组与指针
- 怎样用指针指向二维数组
- C/C++数据结构中利用指针的三种初始化方式