C指针(3)——指向指针的指针(程序讲解)
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)——指向指针的指针(程序讲解)的更多相关文章
- const 指针与指向const的指针
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...
- 指针总结指向const的指针、const指针、指向const指针的const指针
指针的一些总结 const与指针 指向const的指针指的是指针指向的数据是常量,不可以被修改,但指针变量本身可以被修改,如const int *p:严格说不能用指针间接修改指向的数据,但该变量可 ...
- const指针和指向常量的指针
先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...
- Const指针 、 指向const的指针 、引用、指针
1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42; // error! 指针 ...
- const指针与指向const的指针
当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容.听起来有点混淆一会放个例子上来就明白了. 先说指向const的指针,它 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- [C++]指针和指向数组的指针[一维数组与指针]
1.一维数组与指针 形如:int型 数组 a[10] 1)&a[0] 地址常量;地址类型:int *型 ; 存储数组a的首地址 ...
- C语言数组指针(指向数组的指针)
注意:数组指针的定义,与指针数组的区别 转载:http://c.biancheng.net/cpp/biancheng/view/162.html 指向多维数组元素的指针变量 ① 指向数组元素的指针变 ...
- C语言函数指针(指向函数的指针)
转载:http://c.biancheng.net/cpp/html/3248.html 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常 ...
- [转]const指针与指向const的指针
经常忘记,保存一下.. #include <iostream> using namespace std; int main(int argc, char *argv[]) { ; int ...
随机推荐
- TIA Portal 和 scout 之间的驱动器地址分配
TIA Portal集成了scout.在使用simotion控制器时,分配驱动装置的地址可能会碰到问题. 解决方法: 1)在配置驱动时,TIA Portal软件的语言需要选择为应为中文 2)unico ...
- July 06th 2017 Week 27th Thursday
Knowledge is the antidote to fear. 知识可以解除恐惧. Fear always steps from unknown things. Once we know wha ...
- SVN安装操作流程
SVN 安装操作流程 1.服务端安装流程 1.1 双击打开svn-server安装包 1.2 点击Next 1.3 勾选上“I accert the terms in the License Agre ...
- D3——绘制SVG图形-直方图
1.创建SVG元素 var svg = d3.select("body").append("svg"); 2.为SVG元素设置属性 svg.attr() .at ...
- Loj#572. 「LibreOJ Round #11」Misaka Network 与求和
题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...
- 如何查看Windows下端口占用情况
开始---->运行---->cmd,或者是window+R组合键,调出命令窗口 输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是49157,首 ...
- CentOS 安装postgresql
CentOS 安装postgresql 添加postgresql官网安装源 在/etc/yum.repos.d目录下新建pgdg-10-centos.repo 文件 [pgdg10] name=P ...
- ssh调用matplotlib绘图报错RuntimeError: Invalid DISPLAY variable
1.问题:在本地用matplotlib绘图可以,但是在ssh远程绘图的时候会报错 RuntimeError: Invalid DISPLAY variable 2.原因:matplotlib的默认ba ...
- 陈正冲老师讲c语言之内存的申请malloc() 和释放free()
1.如何使用 malloc 函数 不要莫名其妙,其实上面这段小小的对话,就是malloc的使用过程.malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分 ...
- Gradle Goodness: Unpacking an Archive
To create an archive with Gradle is easy. We have several tasks like Zip, Tar, Jar, War and Ear to c ...