精华内容
下载资源
问答
  • 指针赋值

    一级指针:指向一段内存
    1、内存变量:a 、*p1;
    2、内存地址:&a、 p1;
    3、指针自身地址: &p1;

    二级指针:指向指针p1的指针p2,
    1、内存变量:a 、*p1 、**p2;
    2、内存地址:&a、 p1、*p2;
    3、指针p1自身地址: &p1、p2;
    4、指向指针p1的指针p2的地址:&p2;

    #define _CRT_SECURE_NO_WARNING
    #include<stdlib.h>
    #include<string.h>
    #include<stdio.h>
    #include<iostream>
    using namespace std;
    
    
    void main()
    {
    	//声明一个指针,并初始化
    	int *p1 = NULL;
    	//声明一个二级指针,并初始化
    	int **p2 = NULL;
    	//声明变量a,并初始化
    	int a = 98;
    	//int b = 100;
    	
    	//把a的地址赋值给p1
    	p1 = &a;
    	//把p1的地址赋值给p2, 那么(*p2)就是p1的值,即a的地址,(**p2)就是变量a的值
    	p2 = &p1;
    
    	cout << "p2(p1的地址): " << p2 << endl;
    	cout << "p1的地址: " << &p1 << endl;
    	cout << "。。。。。\n";
    
    	cout << "*p2(p1的值、a的地址): " << *p2 << endl;
    	cout << "p1(a的地址): " << p1 << endl;
    	cout << "&a : " << &a << endl;
    	cout << "。。。。。\n";
    
    	cout << "**p2(a的值): " << **p2 << endl;
    	cout << "*p1(a的值): " << *p1 << endl;
    	cout << "a : " << a << endl;
    
    	system("pause");
    	return;
    }
    
    展开全文
  • 二级指针赋值

    2019-10-05 18:34:17
    #include <stdio.h> #include <Windows.h> #pragma warning(disable:4996) char name[100]; void modify(char ** a) {  //char* name = new char[100];  strcpy(name, "1");... ...
    #include <stdio.h>
    #include <Windows.h>
    
    #pragma warning(disable:4996)
    
    char name[100];
    
    void modify(char ** a)
    {
       //char* name = new char[100];
      strcpy(name, "1");
      *a = name;
    }
    
    
    int main()
    {
      char *b;
    
      modify(&b);
    
      printf("%s", b);
    
      return 0;
    }

     

    转载于:https://www.cnblogs.com/strive-sun/p/11477406.html

    展开全文
  • 我自己的想法是:二级指针是指向指针的指针,二维数组是元素为一维数组的数组,既然一维数组可以赋值给一级指针,那为啥二维数组不能赋值给二级指针呢? 回答: 我理解你的问题是不是这样:char a[2][2]; char**p =...

    问题:

    我自己的想法是:二级指针是指向指针的指针,二维数组是元素为一维数组的数组,既然一维数组可以赋值给一级指针,那为啥二维数组不能赋值给二级指针呢?

    回答:

    我理解你的问题是不是这样:char a[2][2]; char**p = a;为什么会报错是吧?

    你理解的是对的,但是错在,a是指向一维数组,p是指向char*,这两个不等价。
    a指向一维的char数组,sizeof(a),可得其内存大小为sizeof(char) 乘以 数组总长度,比如下图中为6.
    而p只是指向一个char*类型指针,sizeof(p),可得其内存大小为4。指针指向的类型实际是不同的。

    (我自己的实验, 下图可以看出a是char (*)[2]类型的,但数组名并不完全是指针.可以从这篇文章中详细了解:

    https://blog.csdn.net/kangroger/article/details/20653255:

     数组在赋值的时候,会作为指针;但是在计算长度的时候,又变成了数组,这就是C语言的一些坑)

    这里你可能又有疑惑,为啥int b[10]一维数组就可以赋值给int* pb = b呢,这是因为数组退化到指针,只有第一维的数组可以不确定数组长度,可以直接作为首地址。有“数组名能否作为右值”的讨论。

    如果想实现指针赋值,可以这样int(*p)[4] = a;
    这样定义你就可以理解,p是一个指针,指向int[4]一维数组

    转载于:https://www.cnblogs.com/Stephen-Qin/p/10502773.html

    展开全文
  • C语言高级编程:二级指针赋值

    千次阅读 2018-09-02 11:51:16
    在c语言中,经常会对二级指针变量(即指针的指针)进行赋值操作。如果要对一个二级指针进行赋值,不能采用 p = &(&i) 这种语句,即不能对一个变量进行两次取地址操作。因为 &i 的值是一个右值,而&...

    测试环境:win10+cygwin

    ---------------------------------

     

    在c语言中,经常会对二级指针变量(即指针的指针)进行赋值操作。如果要对一个二级指针进行赋值,不能采用 p = &(&i) 这种语句,即不能对一个变量进行两次取地址操作。因为 &i 的值是一个右值,而&的操作数必须是左值,所以&(&i)会产生编译错误。如果写成p = &&i这样就更错了,因为&&表示逻辑与,而不是对一个变量取两次地址。正确的用法应该是 :p1 = &i; p2 = &p1;

     

    1. 错误用法

    #include<stdio.h>
    int main(void)
    {
        int i;
        int **p2 = NULL;
        int *p1 = NULL;
    
        p1 = &i;
        p2 = &&i;
    
        printf("p1 = %#x, p2 = %#x", p1, p2);
    
        return 0;
    }

    编译会出现以下错误:

    将 p2 = &&i; 改为 p2 = &(&i); 则编译会出现以下错误:

     

    2. 正确用法

    #include<stdio.h>
    int main(void)
    {
        int i;
        int **p2 = NULL;
        int *p1 = NULL;
    
        p1 = &i;
        p2 = &p1;
    
        printf("p1 = %#x, p2 = %#x", p1, p2);
    
        return 0;
    }
    

    编译、执行结果如下:

    p1 = 0xffffcbf4, p2 = 0xffffcbe8

     

    展开全文
  • 为什么不能低级非const指针越级向高级const指针赋值的问题 const int n=11; int *p; int **pp; const int ***ppp=&amp;pp;//INVALID const int ***ppp1=&amp;p;//INVALID /*if allowed,then*/ *ppp=(int**)n...
  • 错误的赋值方式: int a[3][4]; int **p = a;用这样的方式赋值时,编译...在一维数组name[],数组名name能够辅助级指针,是因为数组名直接作为数组首地址而赋值给指针; 在维数组时name[][],数组名name指向的
  • C++ 指针和const指针赋值

    千次阅读 2018-11-29 07:55:00
    一 简单示例 int a;...即非const指针不能指向const数据(数据为非指针类型)。 int a; const int c_a = 1; const int* p1; p1 = &amp;a; p1 = &amp;c_a; 即const指针既可以指向co...
  • 1、指针是地址,而不是具体的标量值,这是指针的精髓,不管是一级指针二级 指针、 整型指针、浮点数指针、结构体指针等等等等所有类型的指针,内容都是个地址,而指针本身当然也是有地址的,而且容易忽略的是,...
  • int (*p[num])( char*,int,int );...然后今天主要理一下函数指针数组和二级指针。 函数指针数组 函数指针数组中,存放的一定要是相同返回值类型,以及相同参数列表的函数指针,这样数组可...
  • c++ 指针赋值

    千次阅读 2011-01-14 10:11:00
    若a的内容变为c,则b的内容还是b   二、二级指针   char **c=&a;   char **d=&b;   c=d;//这样是把b的地址了c,此时d和c都指向b,若c的内容发生改变
  • 详细的讨论了指针,解引用,取地址,引用,二级指针
  • 只有6行代码,非常简洁,这是char二级指针给char二维数组赋值的逻辑。二级指针需要赋值操作,加断点就可以看见二维数组里的值了。
  • 深入理解指针以及二级指针(指针的指针)

    千次阅读 多人点赞 2017-08-11 12:05:43
    前言:本文将讲解指针的定义、指针变量和普通变量的本质区别、一级指针和二级指针的关系以及如何通过二级指针修改一级指针所指向的内存。文末还附加了两个实例,帮助读者加深对二级指针的理解。本文试图通过图表的...
  • 二级指针如何分配动态内存并赋值

    千次阅读 2017-10-21 16:44:34
    //二级指针如何分配动态内存并赋值 #include #include int main(void) { int **p = NULL; //最好是显式初始化这个二级指针 以防不测 int m, n, i, j; printf("请输入数组的行数和列数:\n例如格式:5,6 :代表5...
  • 对于二叉树的创建,令我疑惑不解的是用二级指针的操作,会有很多关于指针的操作,但是用二级指针的原因总结起来就是函数的调用是值传递,所以用一级指针需要返回值,而用二级指针需要返回值. 接下来用代码直观的表示...
  • 在前面的文章《如何理解C指针及二级指针(1)》 介绍了指针的一些重要概念,对于一级指针,相对来讲是比较容易理解的,这里就不再赘述了。我们重点来看一下二级指针的使用方式。 我们知道,不管是几级 指针,本质...
  • 本文对结构体中指针赋值问题进行了分析,并用C代码演示了指针的赋值方法。
  • 数组指针,指向一个一维数组的指针,又称行指针,被维数组赋值后可当作维数组操作。 例: int a[2][3]; a[1][2]=5; int (*b)[3]=a; cout<<a[1][2]; cout<<(*(b+1))[2]; cout<<b[1][2]; ...
  • 关于C语言中的数组指针、指针数组以及二级指针

    万次阅读 多人点赞 2017-02-05 19:14:18
    概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素...二级指针 : 如果一个指针指
  • 二位字符串数组用指针数组、数组指针、二级指针打印 2、测试代码 #include int main() { char value[4][5] = {"chen", "yu", "feng", "yy"}; char *p[5]; char (*p1)[5]; char **p2; //把二位数组...
  • #一级指针、二级指针、指针和数组、指针数组总结 ##数组:C 语言中所有的数组都可以看成是一维数组,数组传参的时候会发生降维问题,任何数组传参都会降维成指针。 ##指针:指针存放变量的地址,指向的值是变量的...
  • 首先看下我们在CPU上是如何用二级指针表示二维数组的,其实就两点:一是用一级指针保存数据,二是用二级指针去按行索引数据位置。关于一级指针和二级指针的内存分配这里不讲了,注意数据类型就可以了。 代码做了...
  • 本博文为半摘记性质,收集整理自菜鸟教程、《二级C》及其他互联网资料 —— 本文要点: 1. 指针作为函数参数 2. 指向一维数组的指针以及指针数组 3. 指向函数的指针 —— 1. 指向变量的指针/指针变量 2. 指向数组的...
  • 指针数组和二级指针

    千次阅读 2017-11-21 11:51:02
    数组元素是指针类型的数组就称为指针数组。指针数组的每一个元素都是指针变量... 二级指针,就是指向指针的指针。 #include int main(int argc, char *argv[]) { int a[5]={1,3,5,7,9}; int *p[5],i; int **pp=p;
  • 二级指针

    千次阅读 2015-06-04 20:28:51
    #include void swap(int **r,int **s)// { int *t; t=*r; *r=*s; *s=t; } main() { int a=1,b=2,*p,*q; p=&a; q=&b; swap(&p,&q); printf("%d,%d\n",*p,*q);...下左图为二级指针示意图,右图为一级指针示意图
  • 一级指针与二级指针的使用范围:  一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值;  二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3},
  • C/C++二维数组名和二级指针

    万次阅读 多人点赞 2016-06-23 11:53:41
    二维数组名不能赋值给二级指针,否则运行中可能会出现错误。
  • c语言之二级指针

    2015-03-16 13:22:35
    1.对原始变量进行赋值,则原始变量、指向他的一级指针、二级指针值都会改变 简单点就是:对num,*p_num,**pp_num中任何一个赋值,这三个的值都会改变 2.对一级指针进行赋值,只改变一级指针和二级指针的值,一级...
  • C 二级指针和三级指针的使用

    千次阅读 2016-05-29 11:02:22
    //这里出三级指针作为参数和二级指针作为参数的demo//三级指正作为参数,内存分配在函数内//二级指针作为参数,内存分配在函数外,也就是调用的地方 #include #include #include #include #include #...
  • 给指针赋一个int类型,表示这个指针内存放的内存地址所指向的值是一个int值 *加上指针变量名就代表指针中内存地址所指向的值,如下解释: //变量a的值为10 int a = 10; //指针pointer的值为变量a的内存地址 //*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,620
精华内容 35,848
关键字:

给指针赋值需要二级指针