一二级指针问题#include<stdio.h> int k=7,m=5; void f(int **s) { int *t=&k; s=&t; *s=&m; printf("%d, #include<stdio.h> int k=7; voi...

作者&投稿:宠歪 (若有异议请与网页底部的电邮联系)

你根本都没有调用f()函数

#include<stdio.h>

int k=7,m=5;

void f(int **s)
{
    int *t=&k;
    s=&t;
    *s=&m;
    printf("%d,%d,%d,",k,*t,**s);
}
main()
{
    int i=3,
    *p=&i,
    **r=&p;
}


二级指针问题#include<stdio.h> int k=7; void f(int **s) { int *t=&k; *s=t; printf("%d,%d,%d,",k,*t,~

经过函数f以后 指针r的最终指向已经变成了全局K了 因此是3 7 7
函数f修改的是指针r指向的内存地址 有疑问追问

初值i=3 ,p指向i地址,r指向p的地址。

r传入函数f,s=r=&p,*s=t=&K(k是全局变量,初值7), 所以k==*t==**s, f函数打印 7,7,7
之后返回主函数main,由于之前r是传值不是传址,所以r的值不变,r依然指向p的地址。
但p的地址通过r传入函数f中后,指向的地址值被改变,原指向的地址里面的值不变,所以i还是3!
而p指向的地址发送改变,代码*s=t;相当于p=t=&k,所以*p的值变成了k,也就是7。

**r也就是*p,也是7。
所以主函数打印:3,7,7回车
所以最终全部打印内容为:
7,7,73,7,7回车
PS:这里语句有错,少逗号 printf("%d,%d,%d
"i,*p,**r);}

链表的二级指针操作问题。
答:如果是二级指针传入:S自己的内存空间为1111,L2自己的内存空间为L22222,S指向的内存空间为S1111,S1111指向的内存空间为SS1111,SS1111就是存放的值了。这个时候L2222指向的内存空间也为S1111。这个时候你对*L2重新分配内存空间,就是说S1111重新指向一块内存空间33333,那么同样的对于S来说 他也是重新...

C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p_百度...
答:x的初值是0x100100也就是一个16进制数,指针p指向A的首地址,根据16进制数,此时p指向的是开头的0x10,然后通过指针赋值,此时的x是0x410100。同理指针移位2位,指向末端的0x00。赋值过后,x == 0x410132,把x拆分成3个字节,0x41 0x01 0x32。 由于我们目前用的计算机大部分是小端对齐。高低位...

c语言 二级指针问题 这个程序里w=b;换成w=c;为什么printf("%s\n",*...
答:w=c;这个用法本来就不建议的,即使编译可以通过。我用最浅显的说法来解释就是,两者是不同类型来的,如果你是初学者,那么记住二维数组不是二级指针,二维数组叫行指针,如果你想深入点理解可以往下看,计算机对你的操作解释如下:1)w=c,那么把c[0][0]的地址写入二级指针w中。2)w+1,对于这句...

c语言二级指针中二级指针p,*p是地址还是值,为什么有的时候就是值而不...
答:对于一级指针而言,*p是取值,对于二级指针而言,*p是取地址,但是地址又是无符整形数据,所以在二级指针中你把*p当值来用的话,编译不报错,但是不合规定。

请教C语言二级指针“(void **)&”的问题?
答:你直接printf("%s\n",pBuf);就能打印字符串了。在recvnc函数形参礼用(void **)强制转换是因为函数声明要求形参必须是void **,在printf里面还用(void **)是错的。(3)pBuf是char *,pBuf[0]就是char,*pBuf[0]的用法相当于把pBuf[0]这个char当作指针来用,当然是错的。

Visual C++中二级指针的定义,初始化,赋值问题
答:二级指针和二维数组并不等价。二级指针是一个指向指针的指针 而二维数组其实就是一个指针,char a[3][4]; a是指向整个二维数组的首地址。它相当于(char *)[n],并不是char **;所以不能直接:t=a;要这样:t = (char **)a;以下转帖:今日在论坛上看到有人问到指针的问题,我想通过这样的...

二级指针的用法?
答:用内存地址去理解吧,一级指针是指向定义类型的内存地址,二级指针就是指向定义类型的内存地址所指向的新的内存地址。我举一个例子。include <stdio.h> void main(){char *day[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};char **p;int n;printf("请输入日期...

c语言二级指针初始化为空后赋值问题
答:对指针的理解不够深刻,首先指针也是一个变量。二级指针保存着是一级指针地址的变量,所以int **ppdata = NULL说明了 这个二级指针保存的是一个一级指针的地址,保存的地址是0;由于保护模式的缘故,(可自行查阅资料),ring3无法对保护段的内存进行读写,所以会出现运行时崩溃。而第一个没报错的...

c语言中如何通过二级指针来操作二维数组
答:1、首先我们打开电脑里的C语言软件,新建一个工程和.c文件,输入头文件和主函数。2、然后我们输入图示代码初始化数组,定义变量类型。3、然后我们输入图示代码用for语句实现数组的访问。4、然后我们输入图示代码进行输出。5、然后我们输入图示代码编译、运行,即可通过二级指针来操作二维数组。

C++中用new为二级指针分配空间的问题
答:首先一级指针 INT *ptr;ptr = new INT[10][10]; 这句就是错的,编译不过去,所以也就解决你的疑问了。无论1级还是2级指针都不能中括号相邻分配。其次 INT **ptr;ptr = new INT* [10 * 10]; 这句是指分配了100个int指针,并不是一个10*10的2维数组。如果分配一个2维数组必须 int ...