`
hqs7636
  • 浏览: 215588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c中指针的指针

阅读更多
c中指针的指针
悬赏分:30 - 解决时间:2007-8-15 12:03
int** p 这是什么意思呢,我知道
int*p=&a 是指向int a的一个指针,定义名字为p,存储的是a的地址,p+1的话,执行后为a的地址加sizeof(int),

那int **p 是什么呢
举个具体例子,包括 地址 还有在其上的运算

1、
简单来说 int **p 是一个指向2维数组的指针。
数学上一个2维数组描述有NR行,NC列的矩阵,例如 int a[NR][NC];
为了使程序有通用性,编程时不把这个数组行列数定死,而让使用者临时输入行列数,再动态分配数组存放单元,这时,我们声明一个2维数组的指针(或叫二重指针)。int **a;

int NR,NC;
int **a;
int i,j;

// 假定键盘输入 NR=5,NC=3,动态分配数组:
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++) a[j] = (int *) malloc(sizeof(int) * NC);

// 现在可以直接用 a[j][i] 作运算,不用管 数组元素的地址。
// 例如:
for (j=0;j<NR;j++) for (i=0;i<NC;i++) {
a[j][i] = (j+1)*100 + i;
};

for (j=0;j<NR;j++){
for (i=0;i<NC;i++) printf("%3d ",a[j][i]);
printf("\n");
};

int **a; 是声明。 **a 是什么呢? 打出来看:
printf("%d ",**a);
// 噢,它是 a[0][0] 数组单元的值。

二重指针指向的地址除了始地址外,比较复杂,它同malloc的方法有关。上面的malloc是传统方法,也有人用连续方法。你可以用打印a[j][i]和指针的值和地址自己研究。

[我用a[j][i]写法,是为了与数学一致,i->x轴,j->y轴]



2、
只是二重指针,用来存放指针的指针。
int** p;
int a[20][20];
p=a;这是将二维数组赋给了p,我们可以这样调用a的值*(*(a+i)+j)
int** p;
int *a[20];
p=&a;这是将指针的地址赋给了p,而p代表a[0]的地址,p+1代表a[1]的地址。


3、
二重指针,即指向指针的指针变量

指针变量中储存的是它指向的对象的地址,指针的指针指向的是存放该指针变量值的地址

int **p ;
指向一个地址,
这个地址指向一个int 类型的变量的地址
假设分配的地址是连续的.
int a = 100;*b;**c;
b = &a;
c = &b;
p = c;

地址 内容 表现形式
[1000] [100 ] a,**c,*b
[1004] [1000] b,*p,&a
[1008] [1004] p,&b



4、
指针就是用来存放内存地址的,
int*p存储的是int型数据的地址,
int **p 当然就是存储的int型指针的地址。

二级指针可以用来传参
void func(char **ptr)
{
*ptr = NULL;
}
int main() {
char a = 'a';
char *ptr = &a;
func(&ptr);
}
这样就把ptr的值更改了。

void func(char *ptr)
只能改变指针指向的内容。
分享到:
评论

相关推荐

    堆和栈的区别 深入理解c语言指针的奥秘 C 中指针的复杂应用

    值得瞅瞅 堆和栈的区别 深入理解c语言指针的奥秘 C 中指针的复杂应用

    c中指针的一些特殊用法

    c中指针的一些特殊用法总结 void类型指针

    Keil C中指针与存储区间的关系与特点

    如题,Keil C中指针与存储区间的关系与特点

    C++中指针函数与函数指针的使用

    指针函数 指针函数是一个函数,只不过指针函数返回的类型是某一类型的指针。 格式: 类型名* 函数名(函数参数列表) 使用: /* * 指针函数,返回int* 指针变量 */ int* add(int a, int b) { int *p; int c = a + ...

    C_中指针学习的两个绝好例子

    C中指针学习的两个绝好例子,强力推荐学习一下。

    C,C++中指针问题详解

    指针是初学者必过的一关,看完这些,尤其是PPT和一些练习题,可以让你对指针有个比较形象的理解方式。希望对大家的学习有所帮助

    C++指针应用及注意问题

    下面让我们一起来揭开C/C++中指针的神秘面纱。 指针是c/c++学习一个比较让人头痛的问题,在程序设计过程中,指针也往往是产生隐含bug的原因。下面就来谈谈指针的应用以及需要注意的一些问题,里面也许就有你平时没有...

    指针的使用,和基础知识

    包含指针的定义,使用等。也许你学了很长时间仍不知指针是什么,但看了本文,你讲解开指针神秘的面纱

    C指针详解

    C指针详解,详细说明了C中指针的含义和用法。

    C语言课件第八章指针PPT

    资源包含C中指针的各种问题,适合基础学习者,很好很强大

    c语言难点分析整理,C语言

    5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46...

    C/C++指针经验总结(简明易懂)

    C/C++中指针无疑是比较难理解的一个部分,这份材料对指针进行了比较好的归纳,简明易懂,适合初学者

    指针的详细说明

    你还在为指针发愁吗?请看本文.本文章详细说明拉C,C++中指针的概念,含义,以及函数指针等较为难懂的东西.

    再再论指针

    是一本写指针的书,能使你对C中指针有更深入的理解

    探讨C_C++中的指针.pdf

    本文对C/C++中指针的各种类型进行全面地讨论,把指针常量的定义,变量的定义、赋值和访问都做了举例说明,这对利用C/C++的指针开发大型软件的程序员来说无疑是一个非常有力的工具。本文还探讨了指针变量与数组名的...

    C语言难点分析整理

    5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位...

    史上最强的C语言资料

    5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46...

    高级C语言详解

    5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46...

    高级C语言 C 语言编程要点

    5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46...

    Swift中的指针操作及使用

    这在一定程度上造成了在Swift中指针使用的困难,特别是对那些并不熟悉指针,也没有多少指针操作经验的开发者(包括我自己也是)来说,在Swift中使用指针确实是一个挑战。在这篇文章里,我希望能从最基本的使用开始,...

Global site tag (gtag.js) - Google Analytics