关于二级指针有关的赋值及作为参数的问题

C语言 码拜 8年前 (2016-09-17) 1433次浏览
#include<stdio.h>
int k=7,m=5;
void f(int **s)
{
int *t=&k;
s=&t;*s=&m;
printf("%d,%d,%d\n",k,*t,**s);
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d\n",i,*p,**r);
}
//运行结果7,5,5
3,3,3

这里的s=&t;是什么意思?不用&为什么会错?*s=&m;又是什么意思?而且屏蔽*s=&m;后结果怎么不一样,屏蔽之后再把s=&t改为*s=t;好像结果也一样。还有什么其他全部的赋值的,列一下?

#include<stdio.h>
int k=7;
void f(int **s)
{
int *t=&k;
*s=t;
printf("%d,%d,%d\n",k,*t,**s);
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d\n",i,*p,**r);
}
//运行结果7,7,7
3,7,7

这个例子和上面相似,都是两个二级指针做参数,但是结果却不一样为什么?还有二级指针做实参时为什么是f(r);而不可能是f(*r);或是其他的可能。总感觉有一些本人不会的知识点,希望哪个高手给本人详细说说,十分感想。

解决方案

10

二给指针就是指向一级指针的指针
s=&t 就是取t的地址,t是一个一级指针,&t得到一个二级指针
不用&类型不同竟然会报错,一个是int*,一个是int**

30

理论上不可以有啥指回问题。
改变二级指针指向,只好用三级指针做形参,传递二级指针的地址。
C++可以用指针的引用做形参。
,,,,,,,,,,,,,,,,,
话说,C,C++给程序员一定的灵活性,
代价是本人控制逻辑,本人检查问题,
编译器对这种灵活的技巧,
不支持,也不反对
全靠本人保证没问题。

5

对任何开发语言,都需要
本人控制逻辑,本人检查问题,
编译器对程序员使用灵活的技巧,
不支持,也不反对
全靠本人保证没问题。
区别仅仅是五十步笑百步而已。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于二级指针有关的赋值及作为参数的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)