关于定义指针,请教~
如:int**p,*q,k=10;q=&k;p=&q;printf("%d",**p);在指针定义中,为什么要使用**p来定义一个指针的指针,为什么不能直接用*p来定义一...
如:
int **p,*q,k=10;
q=&k;
p=&q;
printf("%d",**p);
在指针定义中,为什么要使用**p来定义一个指针的指针,为什么不能直接用*p来定义一个指针的指针呢?**p本身就代表一个开辟一个4字节空间来装一个变量的地址,那么,那为什么不能直接装*q的地址呢?
还有是不是指针的指针,没多一层嵌套就加一个*号呢,像是***p这样。
这是为什么呀?指针空间不能装指针的地址吗?指针的地址和普通变量的地址有什么区别?还要分开装?
还有是否可以将整形变量用来装地址数据呢?然后用指针把整形存储的地址数据取出来在使用呢?因为本身整形变量的值和它的地址都是一串数据,并且都是32位4字节嘛。
请教,谢谢~
那我想问一下,是不是嵌套的指针,如*****p,这样在定义时就要定义好?这样使用时不是有些不方便吗,因为我可能并不知道它会嵌套几层,难道写完程序还要数一下?
非常 谢浩1991 的回答,请教一下这个,完了给你加分,非常谢谢。 展开
int **p,*q,k=10;
q=&k;
p=&q;
printf("%d",**p);
在指针定义中,为什么要使用**p来定义一个指针的指针,为什么不能直接用*p来定义一个指针的指针呢?**p本身就代表一个开辟一个4字节空间来装一个变量的地址,那么,那为什么不能直接装*q的地址呢?
还有是不是指针的指针,没多一层嵌套就加一个*号呢,像是***p这样。
这是为什么呀?指针空间不能装指针的地址吗?指针的地址和普通变量的地址有什么区别?还要分开装?
还有是否可以将整形变量用来装地址数据呢?然后用指针把整形存储的地址数据取出来在使用呢?因为本身整形变量的值和它的地址都是一串数据,并且都是32位4字节嘛。
请教,谢谢~
那我想问一下,是不是嵌套的指针,如*****p,这样在定义时就要定义好?这样使用时不是有些不方便吗,因为我可能并不知道它会嵌套几层,难道写完程序还要数一下?
非常 谢浩1991 的回答,请教一下这个,完了给你加分,非常谢谢。 展开
6个回答
展开全部
楼主问问题比较多,我只说下我的看法。
(1)声明 int **p;
变量p是一个指针,而它所指向的类型是一个整型指针,这样就定义了一个指向指针的指针。
而int *q;
变量q是一个指针,它所指向的类型是一个整型,所以不能用来定义一个指向指针的指针。
q的值是一个地址,而*q表示的是q所指向的地址中的值。
(2)*q是一个值而不是一个地址。
(3)多嵌套一层,应该是要多加一个*。其实*表示的是取变量所指向的地址存储的数值。
(4)指针变量的地址和普通变量的地址是相同的。使用指针更加灵活。这个你使用多了就知道了。
(5)可以用整型变量来装地址,理由跟你说得差不多,但是一般不这么用。
这里我写的程序,你看看,希望对你有帮助。
#include <stdio.h>
int main()
{
int **p, *q, k=10;
#if 0
q = &k;
p = &q;
printf("%d\n",**p);
#endif
#if 1
// 初始化指针,如果不初始化后面将出错。
q = (int *)malloc(sizeof(int *));
p = (int **)malloc(sizeof(int **));
*p = (int *)malloc(sizeof(int *));
*q = k;
**p = *q;
printf("%d\n",**p);
// 分配了地址,记得及时释放。
free(q);
free(*p);
free(p);
#endif
return 0;
}
(1)声明 int **p;
变量p是一个指针,而它所指向的类型是一个整型指针,这样就定义了一个指向指针的指针。
而int *q;
变量q是一个指针,它所指向的类型是一个整型,所以不能用来定义一个指向指针的指针。
q的值是一个地址,而*q表示的是q所指向的地址中的值。
(2)*q是一个值而不是一个地址。
(3)多嵌套一层,应该是要多加一个*。其实*表示的是取变量所指向的地址存储的数值。
(4)指针变量的地址和普通变量的地址是相同的。使用指针更加灵活。这个你使用多了就知道了。
(5)可以用整型变量来装地址,理由跟你说得差不多,但是一般不这么用。
这里我写的程序,你看看,希望对你有帮助。
#include <stdio.h>
int main()
{
int **p, *q, k=10;
#if 0
q = &k;
p = &q;
printf("%d\n",**p);
#endif
#if 1
// 初始化指针,如果不初始化后面将出错。
q = (int *)malloc(sizeof(int *));
p = (int **)malloc(sizeof(int **));
*p = (int *)malloc(sizeof(int *));
*q = k;
**p = *q;
printf("%d\n",**p);
// 分配了地址,记得及时释放。
free(q);
free(*p);
free(p);
#endif
return 0;
}
展开全部
是的,你自己定义的是几重指针,必须自己很清楚,编译器只判断你使用时是否合法。你不知道嵌套几层就没法用,这就是C的规则,必须遵循。另外通常指针最多用到三重,一般不会再高了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言是一个强类型语言,如果不强制转换的话,那么它就一直代表一种类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要去你朋友的朋友家,你得先找你朋友,你朋友再去找他那个朋友。你要问为什么我不能和我要找的那个人成为朋友,因为程序很大,如同现实生活一样,你不可能和所有人成为朋友。
要了解一个知识最好的方法是去用它而不是想它。
你又问“我是不是要提前知道这个指针是多少层的”,当你用一个三层的指针时,你肯定是要用它指向二层的指针,这个二层的指针或许是你函数的参数,总之它就在你周围。
要了解一个知识最好的方法是去用它而不是想它。
你又问“我是不是要提前知道这个指针是多少层的”,当你用一个三层的指针时,你肯定是要用它指向二层的指针,这个二层的指针或许是你函数的参数,总之它就在你周围。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询