二级指针的一些问题

作者&投稿:繁德 (若有异议请与网页底部的电邮联系)
下面代码中的(*n)--;++(*n) 是什么意思?
void fun(int *n)
{
while ((*n)--);
printf("%d",++(*n));
}
main()
{ int a=100;
fun(&a);
}
直接用n--,那是对指针保存的地址编号进行自减1 ,让指针指向上个内存单元。
用(*n)--; 是取指针指向的变量的值,之后再将这个值自减1。
传个100给func()函数,while循环一直让100自减1,直到为0时,退出循环,这个要注意(*n)--,while循环判断*n为0时,还有一次自减1没有进行,因为(*n)--表达式的值是*n的值,但表达式的作用是让*n的值自减1,而且是在这个表达式所在代码执行完后才执行,因此,while循环结束后,*n的值被自减1,所以是-1。
之后的printf("%d",++(*n)); 是打印 -1自增1后的值,也就是0。

下面这个题目他是怎么算那个字符串的长度等于5的,求下指点。
#include <stdio.h>
#include <string.h>
main()
{
char *p="abcde\0fghijk\0";
printf("%d\n",strlen(p));
}
strlen()函数用于获取字符串的长度,其实strlen()函数的原理,也就是从头至尾对比字符串中每个字符,如果这个字符为'\0',那就代表这个字符串结束了,字符串的长度统计也会结束。
由于你的字符串"abcde\0fghijk\0"中有两个'\0',但strlen函数只读到第一个'\0'就结束字符串长度的统计,因此,这个字符串的长度是5。

下面这个题目怎么解?
#include <stdio.h>
main()
{
char ch[2][5]={"6937","8254"},*p[2]; //声明一个二维数组ch,和一个指针数组。
int i,j,s=0;
for (i=0;i<2;i++)
p[i]=ch[i];
//上面的可看成:
//p[0]=ch[0];
//p[1]=ch[1];
//也就是将两个指针,一个指向ch[0],一个指向ch[1].

for(i=0;i<2;i++)//遍历两个字符串
for(j=0;p[i][j]>'\0';j+=2)//遍历字符串中每个字符,一旦该字符为‘\0’,就结束循环
s=10*s+p[i][j]-'0'; //二维数组中保存了数字字符,p[i][j] - '0'的意思是将第i个字符串中的第j个字符,转换为数值,用于计算。

printf("%d\n",s);
}

下面这个题目求指点
#include <stdio.h>
#include <stelio.h>
main()
{ char *p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("%s%s",p,q);
printf("%s%s\n",p,q);
}
你这是谁的代码?此类风格的代码看过N遍了,是谭浩强的?
stelio.h又是什么头文件?

p=(char*)malloc(sizeof(char)*20);
用malloc申请能容纳20个char型变量的内存空间,sizeof(char)是得出单个char型变量占用的内存空间,乘以20,是要20个这样的连续的内存空间。申请到后,用指针p来保存该内存空间的地址。

q=p;
将指针p保存的地址,给指针q,指针p和q保存的是同一个内存空间的地址。
scanf("%s%s",p,q);
printf("%s%s\n",p,q);
输入两个字符串,但由于指针p和q指向的是同一个内存地址,因此,这代码就像这样:
scanf("%s",p);
scanf("%s",p);//第二次输入的字符串,覆盖了第一次输入的。
printf("%s%s\n",p,q);的结果也可想而知了,两个段同样的内容。

人呢?在哪?给个回复。

二级指针问题~

第一个程序是:
#include
#include
using namespace std;
int k=7;
void f(int **s)
{
int *t=&k;
*s=t;
printf("%d,%d,%d,",k,*t,**s);
}
int main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d
",i,*p,**r);
}

对于这个程序你要看到在main()函数中的**r=&p语句,当**r作为f函数的实参传递给f函数时,要注意*s=t语句,这两条语句正是答案后边为3,7,7的原因,**r=&p是对p这个一级指针区地址,因此r这个二级指针所存放的是p的地址,而*r是间接引用p的值,而p的值是i的地址。对于*s=t这个语句是把t的值赋给了*s,我们知道s就是r这个二级指针,*s是*r,即p.所以这个语句的意思实际上是把t的值赋给了一级指针p,而t的值是k的地址,所以就相当于把k的地址传递给了指针p,现在指针p就不会指向i的地址了,而是指向k的地址。所以**r=*p=k=7;所以最终结果是3 7 7。
第二个程序是:

#include
#include
using namespace std;
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;
f(r);
printf("%d,%d,%d
",i,*p,**r);
}
这个仍然是将r指针传递到f函数中,在f函数中s=&t;s对t指针取地址,所以*s就代表的是t指针,下一个语句是*s=&m;这个相当于是t指针对m取地址。所以**s=*t=m=3;而函数f的调用执行完了以后会自动销毁数据,不同函数之间互不影响,因此在main()函数中看printf("%d,%d,%d
",i,*p,**r);语句,此时*p=&i,**r=&p,语句是不受f函数中的那些操作的影响的,所以说**r=*p=i=3.所以结果才是3 3 3。

大概就是这样,你肯定能看懂的。。

**指的是二级指针,没有问题。**表示find_min_p函数返回的是二级指针呀。这个二级指针指的是*root->l的地址。由于l是一个一级指针,它的地址肯定是二级指针咯。

关于c语言二级指针的一个问题
答:—这说明一个问题:就是指针不单单是个地址数值,还承载着很多必要的其他信息(比如int *型指针++会跳过4字节,char *型指针++却只跳过1字节,这就是它们承载的其他信息不同)。不然,分什么int *型指针、char *型指针、struct *型指针……还有什么意义?它们不都只是个4字节的无符号整数吗?

C语言指针问题(初学者)
答:1.概念问题:指针是指存放地址值的变量或常量;指针与一般变量或常量的区别,在于它不直接存储数值,而是存放被存储数值的地址,属于间接存放,所以不少初学者感觉学习困难。比如:int a=2,b,c,*ptr; ptr=&a;表示将指针ptr指向变量a,存放a的地址,假设是2000H,而指针变量ptr本身也要有地址,假...

初级C程指针问题
答:这段代码相当于下面的代码:struct A { int x,y[3];};static A a[3]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a+3;int z;z=*((int *)(p-1)-1);下面进行说明。首先,这里定义了一个结构体A。其次,有一个A结构体的数组及一个指向A结构体类型的指针p。先分析这个结构...

C语言中关于指针问题
答:故此时(*w+1)[4]便相当于某一级指针向后偏移4个单位的值(与一维数组a[4]的意思差不多)。所以答案B中在(*w+1)[4]的基础上再加个*便有语法错了,就跟*a[4]一样。再所以,答案A是正确的也就不难理解了。按你题目的意思,答案D你应该理解了。还不理解就补充问题吧。。

关于C语言指针的问题
答:在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越 来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的 类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不 少书,发现有些写得差的书中,就把...

有关指针的问题
答:但是当一个二级指针的后一维确定了以后,这个指针和通常的一级指针或二级指针就有些不同了,这个不同体现在对指针的加减运算上,后面我会分析到。下面来看程序:我先把数组a的各元素列一下后面好说明:a[0]: 1 3 4 12 a[1]: 34 56 78 97 a[2]: 43 21 45 74 程序如下,在必要的...

C语言中一级指针为什么不能指向一级指针的地址,问题疑惑如下图_百度知...
答:一级指针所指向的地址内存放的是数据,如果用一个一级指针指向一个一级指针,就是默认原一级指针中存放的是数据内容,而不是原数据的地址。这种情况会造成指正指向不正确,以及原数据的丢失。如果有什么不对请见谅。

关于指针基本问题
答:而不是p的地址等于q的地址,还是那句话,地址相当于钥匙,房子里的东西才叫做值,这里p,q都是指针,他们的值是他们房间里的东西,这个东西,因为他们是地址,所以也是钥匙,指向另一个房间。他们的地址,是他们本身的钥匙。4。当p=q了,那么*p和*q自然是一个值,p和q相当于一个房间的两把钥匙,...

c语言关于多级指针的问题
答:首先,这种写法是错误的,系统不会给你创建隐藏的一级指针 正确写法是 int a,*b,**c;c=&b c=&a 只有在c赋值为一个一级指针地址的情况下,*c才是合法的,否则对*c赋值会出现不可预知后果

C语言指针问题
答:p是一个指针, 指针指向 int[6]类型, 就是可以是n个int[6], 但不可以是int[4]s和p都是是一个int[][]指针常量类型.A项 t是一个6*4, 就是有6个int[4],B项 s是一个4*6, 就是有4个int[6],可以 C项, 不同级指针, 应该是p = &(s[i]); 而且i要比4小 D项, 不同级指针,...