五、数组和指针的关系

int array[10] = {0,1,2,3,4,5,6,7,8,9},value;
...
...
value = array[0];//也可以写成 value = *array; value = array[3];//也可以写成 value = *(array+3); value = array[4];//也可以写成 value = *(array+4);

  上例中,一般而言,数组名array代表数组本身,类型是int[10];如果把array看作指针的话,它指向数组的第0个单元,类型是int *,所指向的类型是数组单元的类型 int ,因此*array = 0 就一点也不奇怪了。同理,(array+3)指向数组单元的第三个指针,所以*(array+3) = 3 ;

  

char *str[3] = {
"Hellp,this is a sample",
"Hi ,good morning ",
"Hello world"
}; char s[80];
strcpy(s,str[0]);//也可以写成 strcpy(s,*str);
strcpy(s,str[1]);//也可以写成strcpy(s,*(str+1));

  上例中,str是一个三单元的数组,该数组的每个单元都是一个指针,这些指针每个都指向一个字符串,如果把数组名看作指针的话,它指向数组的第0号元素,类型是char** ,指向的类型是 char *;

*str 也是一个指针,它的类型是char*,指向的类型是char ,它指向的地址是字符串 “Hello,this is a sample”的第一个字符H的地址。*(str+1)也是一个指针,他的类型是char*,指向的类型是char,指向“Hi,good morning”的第一个字符H的地址。

  在不同的表达式中,数组名array可以扮演不同的角色 。在表达式sizeof(array)数组名array 代表数组本身,故测出的是整个数组的大小。在表达式*array中,array扮演的是一个指针,所以该表达式就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。表达式array+n,array扮演的是指针,故array+n也是指针,他的类型是type*,指向的类型是type,指向数组第n号单元,故sizeof(array+n)测出的是指针类型的大小。

六、指针和结构类型的关系

struct mystruct
{
int a ;
int b;
int c;
} mystruct ss = {20,30,40};
mystruct *ptr = &ss;//声明了一个指向结构对象ss的指针,它的类型是myStruct * ,指向的类型是mystruct int *pstr = (int *)&ss//声明了一个指向结构对象ss的指针。但是他的类型和它指向的类型和ptr是不同的,请问如何通过指针ptr来访问ss的三个成员变量

  答案:

ptr ->a;
ptr ->b;
ptr ->c; 请问如何通过指针pstr来访问ss的三个成员变量
答案 *pstr;
*(pstr+1);
*(pstr+2);

  这样使用pstr来访问结构成员是不正规的。那么该怎么样来通过指针访问数组的各个单元呢?

int array[3]={35,56,37};
int *pa = array;
//通过指针pa访问数组array的三个单元的方法是:
*pa;
*(pa+1);
*(pa+2);

  从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样.所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个“填充字节”,这就导致各个成员之间可能会有若干个字节的空隙。所以,在例十二中,即使*pstr访问到了结构对象ss的第一个成员变量a,也不能保证*(pstr+1)就一定能访问到结构成员b。因为成员a和成员b之间可能会有若干填充字节,说不定*(pstr+1)就正好访问到了这些填充字节呢。这也证明了指针的灵活性。要是你的目的就是想看看各个结构成员之间到底有没有填充字节,嘿,这倒是个不错的方法。

C语言指针学习(续)的更多相关文章

  1. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  2. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

  3. C语言指针学习总结

    上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂. 最近在重温数据结构的内容,因为大多数据结构的教材都是用C语言描述的,而数据结构中也大量的用到了指针的内容,所以我就在这篇笔记中 ...

  4. (转载)c语言指针学习

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  5. c语言指针学习【转】

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  6. 1.C语言指针学习之外挂篇

    学习了c语言的指针,那么指针能做什么呢,首先,他可以写外挂 首先我们来编写一个dll,挂载到植物大战僵尸上,记住是dll,因为如果你创建一个应用程序,该应用程序是不能操作其他程序的地址的. 第一步,打 ...

  7. c语言指针学习笔记

    指针变量就是存放内存地址的变量.c语言中使用 int *pa; 的方式来定义指针. ` main() int a = 10, b=20, s, t, *pa, *pb,*pc,*pd; pa = &a ...

  8. GO语言学习(十五)Go 语言指针

    Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...

  9. 2-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 前面我们对于: c语言的基本用法 makeFile文件的使用 main函数的详解 标准输入输出流以及错误流管道 工具与原理 指针与内存都是c语言中的要点与难点 指针 数组 ...

随机推荐

  1. AutoTransformHandler

    public static ObservableCollection<F> Transform<T, F>(List<T> target) where F : ne ...

  2. IOS开发UI基础UITextFidle相关属性

    UITextFidle相关属性 •    enablesReturnKeyAutomatically默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

  3. nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板

    上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能.那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mo ...

  4. access数据库多个left join示例

    代码: /// <summary> /// 分类检索 查询selectname /// </summary> public static DataTable GetSelect ...

  5. PowerShell 从网站上下载文件

    在cmd下 执行powershell,可能会出现禁止运行的策略, 运行如下命令: powershell set-executionpolicy remotesigned 然后运行: powershel ...

  6. ASP.NET文本框密码赋默认值的方法

    对于普通的文本输入框,可以使用下边的方法赋默认值: <asp:TextBox ID="TextBox1" runat="server">12345& ...

  7. WinForm设置右键菜单

    上一篇:设置窗体透明C#代码 如果要实现MDI窗体的右键菜单,可以添加一个contextMenuStrip(ID设置为:contextMenuStrip_hewenqi),然后设置窗体的Context ...

  8. html5人物图片360度立体旋转

    体验效果:http://hovertree.com/texiao/html5/10.htm 下载:http://hovertree.com/hvtart/bjae/t16oddyt.htm 代码如下: ...

  9. Python中的元组(tuple)、列表(list)、字典(dict)

    -------------------------------更新中-------------------------------------- 元组(tuple): 元组常用小括号表示,即:(),元 ...

  10. CentOS7 Debian 8 安装VMware-tools

    如在安装过程中碰到未找到gcc 或者 kernel headers的可按以下方案解决,适用任意版本 CentOS 7 1. Update the kernel: $ yum update kernel ...