作者Casanoba (卡萨诺巴--卡巴)
看板C_and_CPP
标题[问题] 指标观念
时间Thu Feb 12 21:40:05 2009
各位版友好,我写了一个节点结构,
然後再设计一个函式用来新增这个节点,
程式码如下,编译会过,
但执行时会跳出错误,我试了一下,
发现如果用注解的语法,就可以顺利执行,
但我完全不懂为什麽,只觉的是指标操作有误,
所以想请问一下大家,
是我的观念有那里错误吗?
先感谢大家的回答了!
typedef struct node{
char item;
} Node;
//void add(Node **, char);
void add(Node *, char);
int main(){
Node *nfPtr = NULL;
//add(&nfPtr, 'a');
add(nfPtr, 'a');
printf("item of node = %c\n", nfPtr->item);
system("PAUSE");
return 0;
}
//void add(Node **nPtr, char itemValue){
void add(Node *nPtr, char itemValue){
//if (*nPtr == NULL) {
if (nPtr == NULL) {
nPtr = malloc(sizeof(Node));
//*nPtr = malloc(sizeof(Node));
(*nPtr).item = itemValue;
//(*nPtr)->item = itemValue;
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.8.136
1F:→ COLDTURNIP:你宣告了指标,但没给他分配空间去存值。 02/12 21:50
2F:→ ceon:应该是没配置记忆体吧~ 02/12 21:50
3F:→ softwind:宣告一个 ptr 但是 这个ptr是要被更动的 so 你实际上是 02/12 21:57
4F:→ softwind:要将 &ptr 传进去 ptr才会被改到 02/12 21:58
※ 编辑: Casanoba 来自: 122.116.8.136 (02/12 22:25)
5F:→ Casanoba:1、2楼的两位,我漏加一行了,我配置记忆体空间也是会爆 02/12 22:26
6F:→ Casanoba:soft大,我有点不明白你的意思,我宣告指标指到那个节点 02/12 22:27
7F:→ Casanoba:结构,然後只改结构里的item值,这样是需要更动ptr吗? 02/12 22:28
8F:推 QQ29:你想在 将nfPtr利用副程式malloc 可是你nPtr=malloc这行 02/12 22:34
9F:→ QQ29:你nPtr就指到别的地方了 主程式的nfPtr还是指在null阿 02/12 22:35
10F:→ QQ29:不然你可以写void add( Node *& ,....)传指标的ref进去 02/12 22:37
11F:→ Casanoba:喔喔,原来如此! 我有点了解了,谢谢Q大! 02/12 22:42
12F:→ Casanoba:所以我注解起来的宣告, void add(Node **,...) 就是要传 02/12 22:45
13F:→ Casanoba:nfPtr的指标ref进去,因此才可以顺利执行,是这样吗? XD 02/12 22:46
14F:推 QQ29:你**去指向的是 nfPtr本身的位址 跟传ref意思应该一样吧! 02/12 22:53
15F:→ QQ29:底层怎麽实作的我也不知道0.0 02/12 22:53
16F:→ Casanoba:恩恩,听完你的说法,我也觉得就和传ref一样,再次感谢~ 02/12 23:06