[问题]双重 指标存取字串

楼主: mp8113f (丹枫)   2016-04-04 13:47:16
http://ideone.com/UhNQlR 先附上原始程式码
这是某本书上的范例但是照打上去于DEv编译会出现错误
问题1 : 对于ptr = temp 的这行意义不是很了解
看字面上似乎想要让ptr指标指向temp指标存取的值(指向某字串的位址)
但temp并未初始,所以这个步骤对我来说有点诡异
问题2 : 我假设问题1的步骤可能是要这样写
ptr = &temp
那么我想要让三个字串的起始位址连续存入三个内存位址中
于是我也写了跟范例一样的语法
*(ptr+0) = string1;
*(ptr+1) = string2;
*(ptr+2) = string3;
而我想要确认这三个位址是否真的连续接着
于是自行加上输出
for(n=0 ; n<3 ; n++)
printf("第%d个字串的位址为%p\n",n+1,*(ptr+n));
不过1跟2的位址是连续,但第三个位址直接跳去不知道哪个地方
很明显不连续
以至于我在加上输出打印时就产生错误
for(n=0 ; n<3 ; n++)
printf("第%d个字串的字串为%s\n",n+1,*(ptr+n));
想要知道问题的点在哪边 Orz ..毫无头绪
问题3 : 关于置底常见错误的12
别想对二维阵列使用pointer to pointer
想请问各位前辈时否有现成的案例可供小弟参考
最近也是有类似的想法正在练习不过好像没出现问题
怕我正在走上这条看似正确的误途上
初次在板上请教,烦请各位不吝指教
作者: stupid0319 (征女友)   2016-04-04 13:55:00
看到char **ptr,建议你还是换本书好了
作者: kai5566 (改名Dirk_AI56)   2016-04-04 15:40:00
一楼?为什么?
作者: stupid0319 (征女友)   2016-04-04 16:03:00
有两颗*就会有三颗,四颗,没完没了啊,无法理解的用法
作者: kai5566 (改名Dirk_AI56)   2016-04-04 16:04:00
.............这是什么理由
楼主: mp8113f (丹枫)   2016-04-04 16:04:00
我也想知道为什么,还是char** ptr比较简洁明了呢另外问题二我想了想,是不是因为直接对*ptr做加减不保险因为不一定会有stack区块让他存? 所以有些人可过有些不
作者: stupid0319 (征女友)   2016-04-04 16:15:00
我常看MSDN,可是机乎都不会出现两颗**的指标大部分都typedef成一个类型,这样比较清楚
楼主: mp8113f (丹枫)   2016-04-04 16:17:00
那如果该宣告pointer to pointer,该怎么写比较专业了解我再研究这个方式看看,感谢 !不过问题二还是不太清楚....囧
作者: stupid0319 (征女友)   2016-04-04 16:19:00
应该对pointer定义成看的懂,易理解明确的名称指标是新手的罩门呀,其实不用想太多,把指标看成变量
作者: Bencrie   2016-04-04 16:21:00
最多就两颗吧
作者: ko27tye (好滋好滋)   2016-04-04 21:12:00
到底为什么会到三颗四颗 最多就两颗阿然后char**是强调型别为char**的ptr变量char **ptr是char型别的双重指标 两个都可以 看你想法然后问题二 你这样是把三个string变量内存位置扔给ptr存,连续的是你的ptr 但那三个本来就不一定会连续
楼主: mp8113f (丹枫)   2016-04-04 21:30:00
我大致上懂了,所以若我要连续存,最好方法是我设定一个temp指标矩阵确保连续对吧?
作者: ko27tye (好滋好滋)   2016-04-04 21:33:00
不用阿...你&ptr &(ptr+1) &(ptr+2)出来会连续没错
楼主: mp8113f (丹枫)   2016-04-04 21:34:00
没事,我弄反了,string本身不连续所以这样做不太保险感谢你的解说 !若要确保三个字串连续那应该开个矩阵存这三串了就不能用分开的方式存入指标
作者: ko27tye (好滋好滋)   2016-04-04 21:37:00
yes
楼主: mp8113f (丹枫)   2016-04-04 21:49:00
了解,不过这题我编译没问题,但执行会意外错误,只能再找找是不是哪边写错了
作者: ko27tye (好滋好滋)   2016-04-04 22:02:00
指标可以存三种东西 0、某个物件的内存、另一个指标你那个temp没指东西,然后ptr又指向它 很容易出错的
楼主: mp8113f (丹枫)   2016-04-04 22:04:00
感谢k大指点,回去马上debug
作者: Caesar08 (Caesar)   2016-04-04 22:27:00
如果你只学C,两个*有存在必要,你不能这样就把书丢掉但如果你用的是C++,那你就不会看到两个*了总而言之,建议你学C++而不是C
楼主: mp8113f (丹枫)   2016-04-04 22:56:00
好的,下一个阶段即是要准备学c +

Links booklink

Contact Us: admin [ a t ] ucptt.com