`
hqs7636
  • 浏览: 220950 次
  • 性别: 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 中指针的复杂应用

    ### 堆和栈的区别及深入理解C语言指针的应用 #### 一、预备知识——程序的内存分配 在深入探讨“堆”和“栈”的区别之前,我们首先需要了解程序运行时内存的基本划分。一个由C/C++编译的程序在运行时,其占用的...

    C语言再再论指针修订版

    2. **增加了C++的相关内容**:相比于早期版本,修订版中加入了更多关于C++中指针使用的讨论,这对于同时学习C和C++的读者来说尤为重要。 3. **章节结构的优化与调整**:修订版中增加或合并了一些章节,并且修正了...

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

    在编程世界里,C 和 C++ 语言中的指针是一个至关重要的概念,它们为程序员提供了直接访问内存的能力,使得高效编程成为可能。本篇将详细阐述指针的相关知识点,包括其定义、用法、操作以及常见陷阱。 首先,我们要...

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

    在Keil C编程环境中,指针与存储区的关系是编程时需要特别关注的一个重要概念,尤其是在嵌入式系统开发中。Keil C提供了多种存储类型,用于指定变量存储的位置,这直接影响到指针的使用和程序的执行效率。 首先,...

    C语言教学中指针作函数参数的讨论.pdf

    本文将就函数调用中指针做函数参数进行讨论,以期对C语言学习者起到有益的帮助。 C语言中的函数调用通常是以函数作为程序的基本组成单位的。一个函数实现一个功能,函数之间通过参数调用和return语句来互相传递消息...

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

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

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

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

    深入理解C指针 (超清晰,完整目录)

    书中可能涉及了C++中指针的高级用法,包括引用、指针成员函数以及模板和泛型编程中的指针应用。 此外,书中可能还包含了对指针错误的讨论,如空指针解引用、悬挂指针、未初始化的指针等常见问题,这些都是程序员...

    DEVC++中指针所有集合

    DEVC++是一款基于Windows平台的轻量级C/C++集成开发环境,由Bloodshed Software开发。这个工具提供了源代码编辑器、编译器、调试器等组件,方便初学者和专业开发者进行C语言编程。在DEVC++中,指针是C语言中极其重要...

    西门子STL指针介绍+案例说明

    符号寻址支持所有存储区,如I/O、M、C、T、DB、L等。 间接寻址包括存储器间接寻址和寄存器间接寻址。在存储器间接寻址中,16位地址指针常用于定时器、计数器、程序块的寻址,而32位地址指针则适用于I、Q、M、L等...

    C_C++指针常量和常量指针详解

    通过对C/C++中指针常量与常量指针的深入理解,我们不仅能够更灵活地运用这些概念来编写高效可靠的代码,还能够更好地避免常见的编程错误,提升程序的整体质量。正确区分并运用这两种指针类型,对于开发高质量的C/C++...

    CC++指针论文数篇(CNKI)

    8. **指针与面向对象编程**:介绍C++中指针如何在类和对象中工作,特别是作为成员变量和成员函数返回值的情况。 9. **指针在实际项目中的应用**:通过案例分析,展示指针在解决实际问题和优化算法性能上的重要性。 ...

    传说中世上最赞的C指针文章

    《传说中世上最赞的C指针文章》深入解析了C和C++中指针的各个方面,对于初学者理解指针的使用具有极大帮助。本文将详细阐述文章中提到的知识点,帮助读者全面掌握指针。 一、指针的概念 1. 指针的类型 指针类型的...

    c指针宝典(大师版)

    标题《c指针宝典(大师版)》和描述“指针——C语言中的精华。只有掌握了指针,你才能说你学会了C语言。”表明本文将深入探讨C语言指针的各个方面,指针是C语言的核心概念之一,它的理解和运用是衡量一个C语言程序员...

    指针的使用,和基础知识

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

    指针学习(亲自打包整理)

    这个名为"指针学习(亲自打包整理)"的压缩包文件,显然是为那些正在学习或复习C、C++中指针知识的人准备的。无论你是初学者,还是在面试笔试中需要巩固指针知识的专业人士,这个资源都能提供宝贵的帮助。 首先,...

    c/c++指针详述

    本文将详细介绍C/C++中指针的各种用法,并通过具体的例子帮助读者掌握这些知识。 #### 复杂类型声明的解析原则 理解复杂类型的声明是掌握指针的基础。通常,这些声明包含多个修饰符(如`*`和`[]`),这些修饰符...

    针对指针教学在《C语言程序设计》中的研究与探讨.pdf

    本文旨在探讨《C语言程序设计》中指针教学的研究与探讨,旨在提高学生对指针的理解和应用能力。通过对指针教学内容的分析和研究,探讨如何调整教学方法和课堂内容组织,使学生难懂的知识点变得浅显易懂,从而提高...

Global site tag (gtag.js) - Google Analytics