二级指针 (C语言)】的更多相关文章

//二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素的指针:(我自认为此假设可应用于多维数组与指针) //②二级指针的主要功能是修改一级指针的值 //打印一维数组 int PrintArr(char **pin, int num){ ; if (pin == NULL) { ERRO_MSG = ; printf("pin==NULL erro ms…
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是.... 但是可能大家比较不容易理解的是,二级指针或者多级指针用在哪里呢?怎么使用呢?有没有必要用呢? 现在我就谈谈C指针的比较经常用到的地方: 我们都知道C语言中函数传递参数都是传递"值"的,如下: void fun(void) { int tmp = 0; c…
先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Node{ ElemType elem; struct Node *next; }Node, *LinkedList; //void init_linkedlist(LinkedList *list) { void init_linkedlist(LinkedList *list…
面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> main() { ; unsigned int *p1 = &num; int *p2 = &num; printf("%u,%d", *p1, *p2); system("pause"…
二级指针内存模型建立 void main2() {     int i = 0;       //指针数组     char * p1[] = { "123", "456", "789" };//二级指针的第一种内存模型                                               //二维数组     char p2[3][4] = { "123", "456", "…
参数传递 C语言参数传递一般分为:值传递和地址传递(本质上只有值传递) (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上很多blog都把引用传递归为C语言参数传递的一类, 当使用Microsoft Visual C++ 2010 Express或VC6之类的编译器时使用引用传递就无法编译通过) 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参) #i…
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组,实际上都是一维的.即不管是几维的,都是通过数组的数组这种方式来创建的,实际上它们在内存中的储存方式还是连续的一维数组. 那么我们再来回来刚刚的问题:为何二级指针不能指向一个二维数组? 二级指针首先是指针的指针,即一个对象的地址的地址,而实际上我们的数组所需要的指针只是需要的指针的一个对象的地址,只是…
用C语言指针作为函数返回值:C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数函数运行结束后会销毁在它内部定义的所有局部数据 #include<stdio.h> #include<string.h> char * strlong(char *d,char *e){ if(strlen(d) > strlen(e)){ return d; }else{ return e; } } int main(){ char *a="taoshihan&quo…
转载:http://c.biancheng.net/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 int *.double *.char * 等. 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针. 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:将这种关系转换为C语言代码: ; int *p1 = &…
二级指针又叫双指针.C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针.C++中可以使用引用类型来实现. 下面讲解C中的二级指针的使用方法. 例如我们使用指针来交换两个整型变量的值. 错误代码如下: 一级指针 [cpp] view plaincopy #include <stdio.h> void swap(int *a,int *b) { int *tmp=NULL; tmp=a; a=b; b=tmp; } int main(int argc,char **argv)…
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是.... p *p **p                                      --- --- ----                                      | |->| |->| |                      …
原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688 C语言更多查看 C语言使用注意事项(一) C语言使用注意事项(二) C语言使用注意事项(三) 二级指针又叫双指针.C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针.C++中可以使用引用类型来实现. 下面讲解C中的二级指针的使用方法. 例如我们使用指针来交换两个整型变量的值. 错误代码如下: 一级指针 #include <stdio.h> v…
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; int *p = nArray; printf("nArray:%p , p = %p\n", nArray,p); 打印出来的将会是两个相同的值.但是数组名并不意味着和指针完全相同, 数组名还有另一个本质,数组名是一个常量,不允许被赋值. 但指针允许被赋值,例如: p = nArray; n…
C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址. 下面,我们通过如下代码展示二级指针的底层实现: #include <stdio.h> int main(){ int a = 777; int* b = &a; int** c = &b; *b = 888; **c = 999; printf("a=%d\n&quo…
指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据 // 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节 使用指针, 实际上应该说成使用指针变量 1> 算术运算 +1 移动几个字节? 看类型: int *,  long *,  char * 2> 获得地址表示的数据 指针里面存储的是地址, 就可以将该地…
//二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //将内存模型①和内存模型②的数据拷贝到内存模型③ ],int num2,char **pin3,int *pnum3){ if (pin1==NULL) { printf("pin1==NULL\n"); } if (pin2 == NUL…
//二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //内存模型详解 //一维数组类型是 typedef int Myarr[5]; Myarr a;(其中Myarr是一维数组类型) //Myarr *p;p是一维数组的指针 //是一维数组的指针的类型是 typedef int(*PArrType)[5]; PArrT…
//二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //打印数组 int printfArr(char **pin,int *num){ ; if (pin==NULL) { ERRO_MSG = ; printf("pin==NULL erro msg:%d\n", ERRO_MSG); retur…
第一种: 指针数组作为输入参数 char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "111111"};//指针数组,数组中的每个元素都是指针,int num = 4; void printMyArray11(char **myArray, int num) { int i = 0; for (i=0; i<num; i++) { //printf("%s \n&qu…
一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  //表示p指向的地址位置(也就是p变量的值) *p                //表示p指向的地址里面的内容 所以 * 的作用:  p变量的值作为地址,去访问这个地址的内容 二级指针 int **pp       //表示定义一个int *型的指针pp &pp            //表示pp…
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅助理解. 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 #include <stdio.h>//输入输出头文件. #include <stdlib.h>//本程序需要用到malloc/free函数,引…
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上面测试表示可以相互替换使用 printf(],p); a是数组名,在数组中代表了数组首地址,类似于&a[]. 而int *p是一个int类型指针,也是指向每一个地址,所以两者的类型相同,都是代表int类型字节地址. int *p = a:是正确的. 我们再使用*(p+),就是将指针P所指向的位置加上一…
1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 sizeof是看数据类型占用大小(字节 何为野指针 声明指针变量后,内部数是随机的,为了避免野指针,初始化的时候要设为NULL 使用完之后,依然要设为NULL 2  昨日回顾 3 字符串易犯错误模型 判断一个指针是否合法应该看这个指针的值是不是NULL 而不是看*的内容 (错,最后a的位置已经变了,…
头文件: #include<stdlib.h> #include<stdio.h> #include<string.h> 函数原型: char ** createBuff(char **buff, int arraylength, int charLength); //创建二级指针 void initDemo(char **buff, int arrayLength); //初始化二级指针 void destoryBuff(char **buff, int arrayL…
重要意义:间接赋值的意义,实现了模块的功能划分,实现了软件作品的分层,使得模块接口和信息系统得以实现. 所谓二级指针就是指向指针的指针,其声明形式如下 int *p=NULL int **p1=NULL; p1=&p; 一级指针*运算,从所指向内存空间取出数值(类比:一级指针是藏宝图,所指向的内存空间是宝藏的存放的地点,宝藏是数值) 二级指针*运算,从所指向内存空间取出地址(类比:二级指针是一个写有藏宝图存放地点的纸条,所指向的内存空间是藏宝图的存放的地点,藏宝图是数值) 通过二级指针改变一级指…
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {"abc", "def", "ghi"}; 这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char * []),数组的每个元素都是一个地址. 在使用的时候,若要使用中间量操作元素,那么此时中间量应该定义为 char *tm…
二级指针:可以理解为指向指针的指针,存放的是指针变量的地址. 下面用一级指针来保存一个指针变量的地址: #include<stdio.h> int main() { int *p1; int *p2; int data; p1=&data; p2=&p1; printf("p1保存的地址=%p\n",&data); printf("data=%d\n",*p1); printf("p2的地址=%p\n",&am…
本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的"值,结果传递"等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是.... p *p **p                                      --- --- -…
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题.我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了.而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组 下面我们讨论指针和二…
----"c 语言的精华在于指针的灵活性.学好指针的目的在于尽可能少的使用指针." 在敲binary search tree(二叉查找树),遇到了问题.在删除的时候,如果删除的是root节点,那么要改变根节点的地址,在实现时会非常卵痛.后来发现有一种好的方法就是使用二级指针,这样可以轻松改变root节点的地址.我只需要改变指向root节点的指针的指针中的所存的地址就好了.为了搞明白二级指针,做了一下实验: typedef struct Tree_Node { int val; Tree…