码迷,mamicode.com
首页 > 编程语言 > 详细

C语言指针学习(续)

时间:2014-10-31 01:06:34      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:blog   ar   使用   sp   div   log   bs   amp   size   

五、数组和指针的关系

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语言指针学习(续)

标签:blog   ar   使用   sp   div   log   bs   amp   size   

原文地址:http://www.cnblogs.com/kui0621/p/4064032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!