指针是c语言的一大利器,可以用他直接对内存进行操作;最近犯了一个大的错误:试图向函数传递一个指针参数,返回函数内部分配的对象的地址;实验证明这种用法是错误的;正确的用法是:把该指针的地址传递给函数,即使用指针的指针,然后用指针的间接引用符‘*’,直接对该指针的内存进行操作;
总结如下:
1.对基本的数据类型(int,char),可以直接传递指针给函数,用*+地址,直接对该内存进行操作;
2.对指针的类型,如果想对指针赋值,改变该指针的内容,则须用指向指针的指针;对该地址进行操作;分析代码如下:
#include <stdio.h> #include <stdlib.h> typedef struct { int a; int b; }node; /* void createnode(node * pn)//pn为临时变量,操作结果只在本函数中有效不能返回, 本例中只对pn进行操作,对调用中的pnode 无效;有去无回 { pn = (node *)malloc(sizeof(node)); pn->a = 100; pn->b = 10; }*/ /*c语言可以直接对内存进行操作,操作的结果必须保存在可用的内存中才有效*/ /*指针的指针,指向一个地址,指针的内容为指针的地址;可以直接对指针的内容进行操作(*pn),把操作结果返回*/ void createnode(node ** pn) { if(*pn == NULL) printf("NULL\n"); (*pn) = (node *)malloc(sizeof(node)); (*pn)->a = 100; (*pn)->b = 10; } int main() { node *pnode = NULL; createnode(&pnode); printf("%d\n", pnode->a); return 0; }