+ -
当前位置:首页 → 问答吧 → 问2个C指针的问题

问2个C指针的问题

时间:2009-03-25

来源:互联网

问几个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; //类似上面的

作者: zqz   发布时间: 2009-03-25

引用:
作者: zqz
问几个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的。
引用:
作者: zqz
2)片段2:
int aa;
char *packages;
......
aa= *(int *)packages; //这里指针packages是如何将值传给非指针aa?
。。。。。
int counter;
*(int *)packages = counter; //类似上面的
(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。

作者: acevery   发布时间: 2009-03-26

谢谢你的指点

作者: zqz   发布时间: 2009-03-26

>>(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。

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

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

作者: zqz   发布时间: 2009-03-26

引用:
作者: zqz
>>(int*)package是把 *char cast 成 *int,第一个*是 dereferece出 (*int)中的int值。

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

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

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

作者: acevery   发布时间: 2009-03-26

谢谢了 ,这样我就明白了点。

作者: zqz   发布时间: 2009-03-27

不 客 气

作者: acevery   发布时间: 2009-03-27

热门下载

更多