C语言指针问题

如图这几种指针定义方式有什么区别呢?求大神详细解答每种的区别满意的话会提高财富值。... 如图 这几种指针定义方式有什么区别呢?求大神详细解答每种的区别 满意的话会提高财富值。 展开
 我来答
风若远去何人留
2018-12-21 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450112
专业C/C++软件开发

向TA提问 私信TA
展开全部
首先,你提到的所有p应该是一个类型,也就是
int *p
即,整型指针类型,该类型与一维整型数组等效,即int []
然后一个个来
第一个,只有用在定义的时候才是对的,
int *p=a;意思是定义int*类型的p,初始化为a。等效于int *p;p=a;
第二个,先p+5,然后取值,等效于p[5],在p=a下,也就是a[5],这里其实是越界的,知道是这个意思就好
第三个,先取值,在值加2,p=a时,*p为a[0],这个就是a[0]+2
第四个和第五个类似,如果p=a,那么四五完全等同,都是a[2]的地址
最后一个,对a[5]先取地址再取值,最终还是a[5],这个和第二个是等价的,当然,也一样是越界
岔路程序缘

2018-12-21 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3412万
展开全部
已经定义int a[5];
假如从a[0]到a[4]分别是0、1、2、3、4,注意,没有a[5],它是非法的!
1、*p=a,如果前面有int,即int*p=a;,其作用是定义指针p并指向数组a;如果前面没有int,则这个写法是错误的(不管p是变量还是指针)。
2、*(p+5),如果已经提前定义int*p=a;,则这个式子表示a[5]的值,但前面已经说过,a[5]不存在!所以这个式子是非法的。
3、*p+2,如果已经提前定义int*p=a;,则这个式子表示a[0]的值+2,本例中=0+2=3。
4、p+2,如果已经提前定义int*p=a;,则这个式子表示a[2](元素2)的地址。
5、a+2,a相当于指针,该式子也表示a[2]的地址。
6、*&a[5],它代表a[5]本身,终因a[5]非法,该式子同样非法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佟佳成和荣愉
2019-12-04 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:700万
展开全部
c语言只能动态分配一块确定大小的内存,使用malloc函数。为了满足你的输入要求,你可以申请一块足以容纳你输入数据的缓存。另外如果非要动态申请的话,你可以一个字节一个字节读取输入的字符,然后动态调用realloc重新分配比之前大1的内存,这样就能实现动态分配。当然这种速度太慢,你可以10个字符10个字符的分配,不够的话就realloc增加10个字节的内存~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乙枫连荷
2019-12-04 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:32%
帮助的人:819万
展开全部
你这个是二维的数组,所以很显然A,B是错的,A,B都是表示一维的。D是表示方法不对。必须像C一样,要不就普通的二维数组表示法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
娱乐文风
2020-04-25 · 贡献了超过121个回答
知道答主
回答量:121
采纳率:100%
帮助的人:5.7万
展开全部

30分钟彻底学会C语言指针

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式