pointer_5

来源:互联网 发布:新手怎么做淘宝分销 编辑:程序博客网 时间:2024/06/03 13:05

一个表达式的结果如果是一个指针,那么这个表达式就叫指针表式
由于指针表达式的结果是一个指针,所以指针表达式也具有指针所具有的四个要素:指针的类型,指针所指向的类型,
指针指向的内存区,指针自身占据的内存。
好了,当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话,这个指针表达式就是一个左值,否则就不是一个左值。

char *str[3]={"Hello,thisisasample!","Hi,goodmorning.","Helloworld"};chars[80];strcpy(s,str[0]); //也可写成strcpy(s,*str);strcpy(s,str[1]); //也可写成strcpy(s,*(str+1));strcpy(s,str[2]); //也可写成strcpy(s,*(str+2));

上例中,str 是一个三单元的数组,该数组的每个单元都是一个指针,这些指针各指向一个字符串。把指针数组名str 当
作一个指针的话,它指向数组的第0 号单元,它的类型是char *,它指向的类型是char 。*str 也是一个指针,它的类型
是char *,它所指向的类型是char,它指向的地址是字符串”Hello,thisisasample!”的第一个字符的地址,即’H’的地址。
注意:字符串相当于是一个数组,在内存中以数组的形式储存,只不过字符串是一个数组常量,内容不可改变,且只能是右值.如
果看成指针的话,他即是常量指针,也是指针常量.
str+1 也是一个指针,它指向数组的第1 号单元,它的类型是char**,它指向的类型是char*。*(str+1)也是一个指针,它
的类型是char*,它所指向的类型是char,它指向”Hi,goodmorning.”的第一个字符’H’

在表达式*array 中,array 扮演的是指针,因此这个表达式的结果就是数组第0 号单元的值。sizeof(*array)测出的是数
组单元的大小。表达式array+n(其中n=0,1,2,…..)中,array 扮演的是指针,故array+n 的结果是一个指针,它的
类型是TYPE *,它指向的类型是TYPE,它指向数组第n 号单元。故sizeof(array+n)测出的是指针

sizeof(int(*)[10])==4
sizeof(int[10])==40
sizeof(ptr)==4
实际上,sizeof(对象)测出的都是对象自身的类型的大小,而不是别的什么类型的大小。

原创粉丝点击