int **q可以分成两部分,即int* 和 (*q),后面的 “q” 中的* 表示q是一个指针变量,前面的int*表示指针变量q只能存放int*型变量的地址。int** q表示为指针变量q只能存放int*型变量的地址。

4-1.c多维数组的定义

#include<stdio.h>
int main(void)
{
int i,j;
int data[2][3]={{1,2,3},{4,5,6}}; //定义二维数组data,2行3列;并对其进行初始化
printf("data[2][3]:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf(" %d",data[i][j]);
}
printf("\n");
}
return 0;
}  

上例子为(a)

结果(a):

data[2][3]:
1 2 3
4 5 6  

对(a)进行修改:数组 int data[2][3];  只定义不赋值。

结果(b):

data[2][3]:
-858993460 -858993460 -858993460
-858993460 -858993460 -858993460  

对(a)进行修改:数组 int data[2][3]={{1,2,3}};

结果(c):

data[2][3]:
1 2 3
0 0 0

对(a)进行修改: printf(" %d",&data[i][j]);

结果(d):

 data[2][3]:
2227836 2227840 2227844
2227848 2227852 2227856

 

4-2.c指针的指针 

#include<stdio.h>
int main(void)
{
char *name[]={"Fujian","Huian"}; //定义指针数组name,并对其进行初始化
char **p_name; //定义指针的指针p_name
printf("name[0]:%p\n",name[0]); //输出指针数组元素name[0]的值,这里是第一个字符串的首地址
printf("name[1]:%p\n",name[1]);
printf("\n");
p_name=&name[0]; //把name[0]的地址赋值给p_name,即p_name指向name[0],因为name[0]的内容是地址,所以p_name是指向地址的指针变量,即指针的指针
printf("&name[0]:%p\n",p_name); //输出p_name的值,即name[0]的地址
p_name=&name[1];
printf("&name[1]:%p\n",p_name);
return 0;
}

  两个地址:前一个是指针变量的内容(为一个地址),即被指针变量指向的数据的地址;

         后一个是指针变量本身的地址,这个地址就是指针的指针的内容。

结果:

name[0]:000E5788
name[1]:000E5780 &name[0]:002EF854
&name[1]:002EF858

4-3.c

#include <stdio.h>
int main(void)
{
char *name[ ]={"Fujian","Quanzhou"};
char **p_name;
int i;
p_name=name;
for(i=0;i<2;i++)
{
printf("%s",*(p_name+i));
}
printf("\n");
return 0;
}

  

补充:指针,就是地址;指针变量就是存储地址的变量。

对于多维数组int data[2][3] ; 2行3列,二维数组可以理解为一维数组的嵌套。

         可以理解为:

      • data是一个一维数组,包含  data[0],data[1]   2个元素
      • 而 data[0] 又是一个一维数组,包含  data[0][0],data[0][1],data[0][2]  3个元素
      • data是 data[0],data[1]  的数组名,所以数组名 data是data[0] 的地址
      • data[0]是数组  data[0][0],data[0][1],data[0][2] 的数组名,数组名是首元素的地址,所以data[0]是data[0][0]的地址
      • 对于一维数组 a[ ] ,则有 a[i] 相当于 *[a+i]
      • 对于二维数组data[ ][ ],则有data[i][j] 相当于*(data[i]+j)  或者 *data(*(data+i)+j)

C指针(3)——指向指针的指针(程序讲解)的更多相关文章

  1. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  2. 指针总结指向const的指针、const指针、指向const指针的const指针

    指针的一些总结   const与指针 指向const的指针指的是指针指向的数据是常量,不可以被修改,但指针变量本身可以被修改,如const int *p:严格说不能用指针间接修改指向的数据,但该变量可 ...

  3. const指针和指向常量的指针

    先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...

  4. Const指针 、 指向const的指针 、引用、指针

    1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42;  // error! 指针 ...

  5. const指针与指向const的指针

    当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容.听起来有点混淆一会放个例子上来就明白了.       先说指向const的指针,它 ...

  6. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  7. [C++]指针和指向数组的指针[一维数组与指针]

     1.一维数组与指针      形如:int型 数组 a[10]                1)&a[0]  地址常量;地址类型:int *型   ; 存储数组a的首地址          ...

  8. C语言数组指针(指向数组的指针)

    注意:数组指针的定义,与指针数组的区别 转载:http://c.biancheng.net/cpp/biancheng/view/162.html 指向多维数组元素的指针变量 ① 指向数组元素的指针变 ...

  9. C语言函数指针(指向函数的指针)

    转载:http://c.biancheng.net/cpp/html/3248.html 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常 ...

  10. [转]const指针与指向const的指针

    经常忘记,保存一下.. #include <iostream> using namespace std; int main(int argc, char *argv[]) { ; int ...

随机推荐

  1. QT的动画效果 抖动 下坠 透明 最近在开发QT收藏了好多链接

    http://blog.csdn.net/liang19890820/article/details/51888114

  2. Jsp Cookie的创建与读取 标签: cookiejsp 2016-11-17 15:14 61人阅读 评论(0)

    Cookie.jsp <%@ page language="Java" import="java.util.*" pageEncoding="u ...

  3. Oracle三种链接方式的区别

    1 nested loops join--我们用设置statistics_level=all的方式来观察如下表连接语句的执行计划: --T2表被访问100次(驱动表访问1次,被驱动表访问100次)-- ...

  4. java学习第一步,使用IntelliJ IDEA编写自己的第一个java程序

    首先下载java的jdk,然后说一下IDEA的配置 IntelliJ IDEA目前公认的最好的java开发工具,不过一般的学校的教学还是使用eclipse来进行java的开发.所以老师一般只会教你如何 ...

  5. [由于远程方关闭传输流,身份验证失败]一次处理支付接口bug记录

    因公司系统升级,出现突然有些银行卡不能支付的情况,最开始排查发现是第三方平台接口返回有问题: 返回如下: 从11月7日下午开始一直联系第三方,第三方开始排查,一直说是数据格式有问题. 修改格式以后问题 ...

  6. ios 线程同步

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/ThreadSafe ...

  7. PHP中的 array_filter 函数

    <?php function test_odd($var) { return($var & 1); } $a1=array("a","b",2,3 ...

  8. php 中输出字符串时怎么换行?

    <?php //php 不同系统的换行 //不同系统之间换行的实现是不一样的 //linux 与unix中用 /n //MAC 用 /r //window 为了体现与linux不同 则是 /r/ ...

  9. Eclipse安装Sonarlint插件

    这里安装的是Sonarlint3.6.插件安装非常简单.插件比Sonar更为简单快捷. 一.首先通过点击Eclipse上方Help菜单会出现一个下拉列表,点击其中的Eclipse MarketPlac ...

  10. 【洛谷P2279】[HNOI2003]消防局的设立

    消防局的设立 题目链接 贪心:每次取出深度最大的节点,若没有被覆盖到,要想覆盖它, 最优的做法显然是将它的爷爷设为消防局 (因为该节点深度为最大,选兄弟.父亲所覆盖的节点,选了爷爷后都能够覆盖) 用优 ...