c语言的数组指针与指针数组
1. 数组指针:指向数组的指针是数组指针
先看下面一段代码:
#include <stdio.h> int main(void)
{
int m[10]; printf("m = %p, &m = %p\n", m, &m);
printf("m + 1 = %p, &m + 1 = %p\n", m + 1, &m + 1); return 0;
}
运行上面的代码得到的结果如下图:
上面代码中&m是指向数组的指针,也就我们说的数组指针,它在m在数值上是完全相等的,都指向的是同一段内存的起始地址经网友garbageMan指正,改为 “分别指向的是具有同一起始地址的两段(块)内存”。但是它们的类型确是不同的。其中m是 int *型的指针;而&m指向的是int m[10]这样一个数组,是一个数组指针,因此m + 1 相当于加上 sizeof(int),由上图可以计算(0x0028FEFC - 0x0028FEF8) = 4; 而&m + 1相当于加上sizeof(int[10]),由上图中的计算(0x0028FF20 - 0x0028FEF8) = 40。
可以有如下定义:
int (*p)[10] = &m; 这里p就是一个数组指针,并且这里(*p)的括号是必须的,()的优先级高于[],因此p首先是一个指针,然后指向的是int [10]的数组。
2. 指针数组:由多个指针组成的数组是指针数组
int *p[10]; 这里可以和上面数组指针做对比。p首先是一个数组,然后类型是指针,因此p是指针数组(含有10个指针,例如p[0]、p[1]。。。p[9],每个指针的类型为int *),它的每个变量都可以用来存放地址。
c语言的数组指针与指针数组的更多相关文章
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- C 语言函数参数只能传指针,不能传数组
今天被要求编写一个C/C++冒泡算法的程序,心想这还不是手到擒来的事儿,虽然最近都是用Javascript程序,很少写C/C++程序,但是好歹也用过那么多年的C语言: 首先想的是怎么让自己的代码看上去 ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- 对于C语言中数组名是指针的理解
我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...
- C语言中的声明解析规则——数组,指针与函数
摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 别人不会给你说的---C语言中数组名和指针的区别 及 sizeof用法
引自: http://blog.csdn.net/tianyue168/article/details/5781924 #i nclude <iostream.h> int main( ...
- C/C++——C语言数组名与指针
版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可 ...
- 【C语言】-指向一维数组元素的指针
本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能 ...
- C语言 结构体相关 函数 指针 数组
. 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...
随机推荐
- Java中重载和重写的区别
重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现. 2) Java的方法重载,就 ...
- 重新安装phpMyAdmin无法运行的解决一例
重新下载phpMyAdmin,并解压覆盖老的版本. 浏览器打开显示 http 500 查看服务器日志显示主要如下: PHP Fatal error: PMA\\libraries\\ThemeMana ...
- c语言的label后面不能直接跟变量申明
; goto JUMP; printf("x is : %d\n",x); JUMP: ; <=== 错误,lable后面不能申明变量,只能是表达式语句(statement) ...
- hdoj 1035 Robot Motion
Robot Motion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 在IDE中用Bing Code Search直接查找代码片段并且插入
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在IDE中用Bing Code Search直接查找代码片段并且插入.
- Day 2 @ RSA Conference Asia Pacific & Japan 2016
上午有两场summits,议题分别是: sum-w01: G2B: Cyber-Business in Myanmar, Indonesia and Thailand sum-w02: Achievi ...
- 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
下面通过分别用C和C++来实现一个链栈(链表实现),从中体会数据封装抽象的思想: C语言实现: C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 【转】Android 快捷方式的创建
http://blog.csdn.net/lenmoyouzi/article/details/16939977 一.在日常开发中,我们经常会遇到这样的需求就是网桌面添加快捷方式:常见的快捷方式有两种 ...
- hdu 3586 Information Disturbing(树形dp + 二分)
本文出自 http://blog.csdn.net/shuangde800 题目链接: hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...
- android 74 下载文本
页面: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool ...