113 /* Construct a new composite name. */
114 static char *
115 new_composite_name (int category, const char *newnames[__LC_LAST])
这种代码奶奶的还真没有看过. 一般都是直接使用指针做参数的. 这里使用了 数组的形式 做参数. 有什么好处呢?
朋友给出了一个简单的例子说明了道理:
#include <stdio.h>
void test(char *p[2])
{
puts(p[1]);
}
int main()
{
char *p[2] = {"hello\0","world\0"};
test(p);
}
输出为:
world
之所以使用数组的形式传参, 主要是为了方便地址偏移方便. 如果不是这样的话, 偏移时需要计算一下, 自己的例子说明:
void test(char **p)
{
puts(*(p + 1));
}
int main()
{
char *p[2] = {"hello\0","world\0"};
test(p);
}
重点被颜色的文字标出
顺便来一个整数偏移:
void test(char **p)
{
// convert pointer to int
int number = (int )p;
// convert int to pointer
// 可以看出, 指针变量加1是偏移4bytes, 如果使用整数的话, 还需要自己计算
p = (char **) (number + 4);
puts(*(p));
}
int main()
{
char *p[2] = {"hello\0","world\0"};
test(p);
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.