标题:gets(p),*p是指针,输入字符串后字符串内容能存入指针吗?
只看楼主
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
结帖率:100%
已结贴  问题点数:20 回复次数:21 
gets(p),*p是指针,输入字符串后字符串内容能存入指针吗?
若运行时从键盘输入字符串qwerty<回车>和abcd<回车>,则程序的输出结果是?
程序代码:
#include<string.h>
#include<stdio.h>
strle(char a[],char b[])
{ int num=0,n=0;
  while(*(a+num)!='\0')num++;
  while(b[n]){*(a+num)=b[n];num++;n++;}
  return(num);
}
main()
{ char str1[81],str2[81],*p1=str1,*p2=str2;
  gets(p1);gets(p2);printf("%d
",strle(p1,p2));//p1和p2都是指针,指向字符串首地址,输入qwerty到底是怎么分配内存的?能存指针里吗?
}
搜索更多相关主题的帖子: qwerty 字符串 键盘 
2015-02-27 10:17
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
得分:0 
while(*(a+num)!='\0')num++;



↓↓

[ 本帖最后由 邵蜜柚 于 2015-2-27 10:20 编辑 ]

请给你男神一个爱你的理由。
2015-02-27 10:19
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
得分:0 
while(*(a+num)!='\0')num++;

请给你男神一个爱你的理由。
2015-02-27 10:19
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
得分:8 
结果为10。

程序的内存分配

1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据
结构中的栈。
2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。注意它与数据结
构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量
在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。

授人以鱼,不如授人以渔
2015-02-27 10:39
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
得分:0 
指针只是个指向的地址,不会储存数据。

授人以鱼,不如授人以渔
2015-02-27 10:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
你“char str1[81],str2[81]”时已经分配内存了,指针只是指向这两个数组的首地址,“gets(p1);gets(p2);”和“gets(str1);gets(str2);”完全等效。
输入两个"qwerty"相当于str1[]="qwerty",str2[]="qwerty",str1、str2的长度都为7,由于你函数里用当型循环,最后一个字符串结束符"\0"未做统计,所以返回结果为6+6=12。

能编个毛线衣吗?
2015-02-27 10:50
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
得分:0 
回复 4楼 执笔画江山
gets函数是从终端键盘读入字符串,p1指向str1首地址,qwerty中的q肯定是存入了str1[0]中,那w按道理是存入str[1]中,可是*p是一维指针,指向str1[0],再输入werty的时候,就没有存储的地方了呀?总不能存入指针里吧?没位置存放了啊?

请给你男神一个爱你的理由。
2015-02-27 11:14
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
得分:0 
回复 6楼 wmf2014
运行结果是10。
不理解为什么等效呢?p1指向str1[0],存储了q,那w用指针怎么表示,不能说移动了指针,指针又指向了str1[1]吧?

请给你男神一个爱你的理由。
2015-02-27 11:17
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 8楼 邵蜜柚
按照你一楼的提示输入"qwerty",运行结果就是12,分析程序也应该是12。数组作为形参就是传首地址,即指针,gets函数会按每接受一个字符指针自动加1处理,直到接受到回车符结束输入。

能编个毛线衣吗?
2015-02-27 11:31
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
得分:0 
回复 9楼 wmf2014
结果是10吧  他这个函数其实就是实现了一个strlen的作用,不是sizeof。

授人以鱼,不如授人以渔
2015-02-27 12:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442221-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096639 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved