c语言数组指针
2018-06-18 04:07:33来源:未知 阅读 ()
这两天学习数组指针,被搞的很蛋疼,分享一下
首先是简单的一维数组
定义一个数组int arr[5]; arr是指向数组第一个元素的int类型指针,arr+1就是指针数组第二个元素的int类型的指针,*arr就是取这个指针里面对应的值,这个比较好理解
int arr[5] = { 1, 2, 3, 4, 5 };//定义数组 printf("\n%x", *arr);//1 =arr[0] printf("\n%x", *(arr+1));//2 =arr[1]
到了二维数组这边比较蛋疼,找了很久找到一句话来解释我的疑惑,然后一切就迎刃而解
定义一个二维数组int arr[2][3]
int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; printf("\n%d", sizeof(*(&arr)));//24 printf("\n%d", sizeof(*arr));//12
二维数组分为行和列,这是一个两行三列的数组,
第一个是&arr是取整个数组的指针,对应类型是int[2][3] ,所以它的对应值的大小是24(每个数字占四个字节)。
第二个 arr代表第一行的数组指针,这里可能需要大家动动脑子,在第一个例子一维数组int arr[3] 里面,arr默认就是第一个元素所对应的指针,类型是int,而指针自增每次的增加量=sizeof(你所用的数据类型)
所以arr+1的值会加4(因为一维数组所对应的元素的指针类型是int,4个字节),所以+1会找到数组的下个元素地址,并*地址求得指针地址对应的值,但是二维数组的里面的值不是int类型,而是int[3]
,所以arr是指向二维数组的第一行的指针,也就是对应里面的{1,2,3}的值,所以它的大小是12个字节
这个时候我们又运行了一段程序
int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; printf("\n%x", arr);// printf("\n%x", *arr);//
发现两个的值都是这个数组的首地址,第一个是数组第一行的指针,所以直接打印会打印出第一行的首地址很正常,我们能理解
但是第二个不是应该打印第一行的值吗?
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C++ this指针 2020-06-03
- C语言程序结构 2020-05-31
- 纯虚函数与基类指针数组的运用 代码参考 2020-04-30
- STL之deque 2020-04-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash