二级指针的使用情况

简介:

一、用二级指针作为函数参数,有两种典型情况:
1.需要传递一级指针的数组时:
例如标准 C 的 main 函数:
int main(int argc, char*[] argv),数组最高维可以退化,char*[] argv 等价于 char** argv。这里
argv 代表命令行参数数组。
2.需要对传入的一级指针进行修改时:
例如:
void alloc_new_char_array(int n, char** t)
{
*t = (char*)malloc(n * sizeof(t));
}
这里可以通过返回值达到相同的效果,不过需要同时修改多个指针的时候就不能用返回值
了。另外,C++中可以用引用代替,本质上和这里的修改指针的方法相同。
----
类似地,一级指针作为参数则用来传递非指针数组,以及对非指针对象进行修改。



******************************************************************************
******************************************************************************

补充二、指针用作传出参数时,需要二级指针

注意指针所指向的内存是在函数内分配的还是在函数外分配的,以及是不是在堆上分配的。
你定义了一个指针,但是并没有分配指针指向对象所需的内存空间;当函数返回后,此函数
栈中的内存会被释放掉,不要让指针指向此函数栈中的内存空间;要指向堆上或此函数外的
内存空间

   实例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <string.h>
char  *ab( void );
void  ak( char  **ret);
void  ac( char  *ret);
int  main()
{
     char  havec[] =  "this is a b c d" ;
     char  **ret;  // Alloc memory for secondary pointer
     char  *tmp;   // Alloc memory for first pointer
     ret = &tmp;  // this is imporint, why?
     ak(ret);
     printf ( "%s\n" ,tmp);  // Ok
     tmp = ab();
     printf ( "%s\n" ,tmp);  // Ok
     ac(havec);
     printf ( "havec = %s\n" ,havec);
     return  0;
}
void  ak( char  **ret)  // output argument, memory is alloced in the function
{
     static  char  aa[] =  "this is output argument" ;
     *ret = aa;
}
void  ac( char  *ret)  // memory is alloced outside the function
{
     char  *tmp;
     if ((tmp = index(ret, 'c' )) ==NULL)  // this is just a example
         return  ;
     *tmp =  '\0' ;
}
char  *ab( void // return a pointer, memory is alloced in global
{
     return  "this is return value" ;
}

   实例2

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int  main()
{
char  *ret;
ak(ret);
return  0;
}
int  ak( char  *ret)
{
static  char  aa[] =  "abc" ;ret = aa;  // This ret is only a copy of the original ret
}



本文转自lilin9105 51CTO博客,原文链接:http://blog.51cto.com/7071976/1362930,如需转载请自行联系原作者
相关文章
|
3月前
二级指针和指针函数
二级指针和指针函数
18 0
|
7月前
指针数组与数组指针
实质: 一个是数组,一个是指针. 区别: 指针数组(存放指针的数组):本质上是数组,每个元素都是指针. char* arr[10]; int* arr[10]; 数组指针(指向数组的指针):本质上是指针,每个元素是int类型(就下面例子而言)
23 0
|
3月前
函数指针数组指针(指向函数指针数组的指针)
函数指针数组指针(指向函数指针数组的指针)
21 2
|
8月前
|
存储 C语言 C++
深入了解指针,指针数组,数组指针。
深入了解指针,指针数组,数组指针。
|
8月前
|
存储 C++
指针数组和数组指针
指针数组其实就是存放指针的数组,数组中的每一个元素都指向一个地址。int* (类型名) p(变量名)[数组大小];//整形指针的数组//一级字符指针的数组//二级字符指针的数组在我们定义指针的时候,我们都是在变量名前面加上一个 * 号,数组指针也是类似的定义模式。int main(){//定义一个指向长度位10的整型数组的指针//解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个//指针,指向一个数组,叫数组指针。
|
4月前
|
存储 并行计算 C++
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
|
9月前
|
人工智能 大数据 BI
指针及其应用2——数组指针、字符串指针
指针及其应用2——数组指针、字符串指针
|
4月前
|
C++
C++二级指针
C++二级指针
23 0
|
4月前
函数指针数组
函数指针数组
32 0
|
7月前
|
存储
数组指针和指针数组
数组指针和指针数组