C语言中二级指针使用

xiaoxiao2021-02-27  212

C/C++中使用指针可以减少函数传递的参数 例如:

typedef struct { int r[MAX]; int length; }SqList;

调用void test(SqList s)函数时,会把结构体SqList拷贝一份传入函数,这样就使得效率变低。 使用指针可以传递结构体,或者数组

二维指针主要用在在子函数中有新生成的变量需要回传回主函数。

void main() { SqList S; S.length = 10; SqList* l = &S; void test3(SqList* s); std::cout << l << " " << l->length << std::endl; test3(l); std::cout << l << " " << l->length << std::endl; SqList** ll = &l; std::cout << ll << " " << *ll << " " << " " << (*ll)->length << std::endl; void test(SqList** s); test(ll); std::cout << ll << " " << *ll << " " << " " << (*ll)->length << std::endl; } void test(SqList** s) { *s = (SqList*)malloc(sizeof(SqList)); (*s)->length = 1; std::cout << s << " " << *s << " " << " " << (*s)->length << std::endl; } void test3(SqList* s) { s = (SqList*)malloc(sizeof(SqList)); s->length = 1; std::cout << s << " " << s->length << std::endl; }

结果如下

0037EA24 10 0043AE80 1 0037EA24 10 0037EA18 0037EA24 10 0037EA18 0043BEC0 1 0037EA18 0043BEC0 1

使用一级指针时,使用malloc函数重新生成的结构体变量将无法传回主函数,而是用二级指针则可以实现回传。 需要注意:二级指针仅仅是把新分配的内存地址返回去,在堆上空间的分配和回收是由程序员自己完成,所以可以正确返回新分配的内存地址的值,而那些在栈上分配空间的变量,则不能用二级指针传值,因为局部变量出了作用域就会被编译器释放,例如用在int型时,由于int型局部变量是在栈上分配存储空间的,所以回传回去实际值已经被释放,返回的值就是错误的。如下:

void main() { int a = 10; int* p=&a; int** ptr; ptr = &p; std::cout << ptr << " " << *ptr << " " << **ptr << std::endl; void test2(int** a); test2(ptr); std::cout << ptr << " " << *ptr << " " << **ptr << std::endl; } void test2(int** a) { int b = 5; *a = &b; std::cout << a << " " << *a << " " << **a << std::endl; }

输出结果:

003DEBA8 003DEBB4 10 003DEBA8 003DEAB0 5 003DEBA8 003DEAB0 13083592
转载请注明原文地址: https://www.6miu.com/read-10886.html

最新回复(0)