- 论坛徽章:
- 0
|
本帖最后由 x5miao 于 2011-10-16 01:53 编辑
回复 7# lwrsmy
(1) %d,%p的含义绝对不一样,int型和指针类型的位数也不一定一样;
(2) t[1]显然不等于t+sizeof(char *),因为他们的类型不一样,一个是char *一个是char **
(3)在通用的32位系统下,t+sizeof(char *)等于t+4等于&t[4],会发生越界
正确的程序应该是:
File1: main.c
- #include<stdio.h>
- char *pt[] = {
- "PT_DATA_COMM",
- "PT_DATA_CONN_CLOSE",
- "PT_DATA_SERV"
- };
- void fun1(void);
- void fun2(void);
- int main(void)
- {
- printf ("print result1 = %p\n", pt[0]);
- fun1();
- fun2();
- return 0;
- }
- void fun1(void) {
- char** t = pt;
- printf ("print result2 = %p\n", t[1]);
- }
复制代码 File method.c
- #include <stdio.h>
- extern char* pt[];
- void fun2(void) {
- printf ("print result3 = %p\n", pt[2]);
- }
复制代码 我电脑上的输出结果是
$gcc -o method main.c method.c -g -Wall
$./method
print result1=0x8048500
print result2=0x804850d
print result3=0x8048520 |
|