- 论坛徽章:
- 0
|
#include <stdio.h>
extern char* pt[];//extern char **pt;并没有什么区别,只在乎你对你片内存怎么解释,实际上都是一个地址,只是这个地址代表的内存中存放的值还是一个地址
void fun2(void) {
printf ("print result3 = %p\n", pt[2]);
}
你说 pt[1] - pt[0] 应该是 :
1. sizeof(char*) (或者再按你的说法 sizeof(int) )呢
2. 还是 strlen("PT_DATA_COMM")+1 ?
pt[1],pt[0]是存放常量字符串的地址,
OwnWaterloo这个哥们说的是对的,
这3个字符串常量不一定是连续存放的。
勉强总结一下:
char *pt[] = {
"PT_DATA_COMM",
"PT_DATA_CONN_CLOSE",
"PT_DATA_SERV"
};
1:三个字符串常量不一定是连续存放的
2:指针加减与类型相关,单位是元素的大小
pt+1 实际上就是下一个元素,即存放指向"PT_DATA_CONN_CLOSE"的地址
(以为该元素是char*,则在32位系统中,地址值增加4)
3实际上最重要的是,你知道这片内存代表什么,你怎么对它进行解释.
pt是指针数组,此时有3个元素,元素的类型是char*,&pt[1]-&pt[0]在32位系统中就是4,
pt[1]-pt[0]结果不确定
4 最终的答案是根据第一个打印出来的值也没有办法确定后面的值,因为字符串不一定是连续存放的
如果是连续存放的情况下才是+sizeof(char *) |
|