LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1010|回复: 6

问2个C指针的问题

[复制链接]
发表于 2009-3-24 22:52:28 | 显示全部楼层 |阅读模式
问几个C指针的问题

各位,我近来在看一些代码,并尝试做些修改,但有几个问题不太明白,
想请教一下:

1)片段1:
char upper(char *packages, int len)
{
char *table=NULL;
...........
parse(packages, table);
..............
}

void parse(char *data_in, char *data_out)
{
.....
*data_out = data_in; //这样传递可以吗???
.....
}

2)片段2:
int aa;
char *packages;
......
aa= *(int *)packages; //这里指针packages是如何将值传给非指针aa?
。。。。。
int counter;
*(int *)packages = counter;  //类似上面的
发表于 2009-3-25 19:40:59 | 显示全部楼层
Post by zqz;1965064
问几个C指针的问题

各位,我近来在看一些代码,并尝试做些修改,但有几个问题不太明白,
想请教一下:

1)片段1:
char upper(char *packages, int len)
{
char *table=NULL;
...........
parse(packages, table);
..............
}

void parse(char *data_in, char *data_out)
{
.....
*data_out = data_in; //这样传递可以吗???
.....
}
data_out = data_in       把data_out和data_in都指向原来data_in指向的地址。
*data_out 是一个char 不能接受 *char的。
Post by zqz;1965064

2)片段2:
int aa;
char *packages;
......
aa= *(int *)packages; //这里指针packages是如何将值传给非指针aa?
。。。。。
int counter;
*(int *)packages = counter;  //类似上面的
(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 21:35:05 | 显示全部楼层
谢谢你的指点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 22:13:55 | 显示全部楼层
>>(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。

这个不是太懂。可否再解释下。
我想把它转成数组等形式,这样好理解点,也安全点。

顺便可否说下,为啥要这么传值?
回复 支持 反对

使用道具 举报

发表于 2009-3-25 22:50:45 | 显示全部楼层
Post by zqz;1965537
>>(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。

这个不是太懂。可否再解释下。
我想把它转成数组等形式,这样好理解点,也安全点。

顺便可否说下,为啥要这么传值?

因为aa是int,所以赋给它的值必须是int,你要把*char指向的值赋给aa就需要先用(*int)操作符把*char指针转成*int指针,再用*操作符把这个int指针指向的数值取出来。

数组本身就是指针,没有必要的,如果你用的是*char的话,记得它指向的连续内存块中数据的最后一个值(不一定是内存块的最后一个byte)要是NULL。另外string.h中的函数尽量用strncpy这样有长度为参数的话安全很多了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-26 22:09:03 | 显示全部楼层
谢谢了 ,这样我就明白了点。
回复 支持 反对

使用道具 举报

发表于 2009-3-26 23:32:53 | 显示全部楼层
不 客 气
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表