搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 求助:p为指向一个指向字符数组的指针变量的指针。
标题:
求助:p为指向一个指向字符数组的指针变量的指针。
只看楼主
peter张
等 级:
论坛游民
威 望:
1
帖 子:56
专家分:98
注 册:2017-3-7
结帖率:
100%
楼主
问题点数:0 回复次数:12
求助:p为指向一个指向字符数组的指针变量的指针。
不定义行指针,能不能像如下代码中定义一个指向指针的指针,然后打印字符串“c program”。
#include <stdio.h>
int main()
{
char str[][9]={"hello ","c program"};
char **p;
p =str;
printf("%s",**p);
return 0;
}
代码能够编译通过,不能执行。
搜索更多相关主题的帖子:
include
return
字符串
hello
2017-03-25 22:11
wp231957
来 自:神界
等 级:
版主
威 望:
422
帖 子:13681
专家分:53296
注 册:2012-10-18
第
2
楼
得分:0
把**p。换成p+1试试
DO IT YOURSELF !
2017-03-25 22:17
peter张
等 级:
论坛游民
威 望:
1
帖 子:56
专家分:98
注 册:2017-3-7
第
3
楼
得分:0
回复 2楼 wp231957
迷到这了。不理解。
2017-03-25 22:23
forever74
来 自:CC
等 级:
贵宾
威 望:
49
帖 子:1636
专家分:3940
注 册:2007-12-27
第
4
楼
得分:0
首先,char [9]是放不下"c program"的。
其次,兼容str的指针是char (*p)[9],当然,具体的9还是要改的。
最后,输出字符串的时候需要的是一个char*类型的东东,既不能是**p,也不能是p或p+1,只能是*p或者*(p+1)这种级别的指针。(针对楼主定义的char **p来说的)
对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-03-25 23:10
forever74
来 自:CC
等 级:
贵宾
威 望:
49
帖 子:1636
专家分:3940
注 册:2007-12-27
第
5
楼
得分:0
#include <stdio.h>
int main()
{
char str[][10]={"hello ","c program"};
char (*p)[10];
p =str;
printf("%s",*(p+1));
return 0;
}
[此贴子已经被作者于2017-3-25 23:17编辑过]
对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-03-25 23:14
烟雨晨曦
等 级:
黑侠
威 望:
7
帖 子:150
专家分:599
注 册:2017-3-5
第
6
楼
得分:0
看来你对指针还是一知半解搞清楚这几个
str[0] + 1;
&str + 1;
str + 1;
2017-03-26 00:50
captain2050
等 级:
论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
第
7
楼
得分:0
每个指向字符串的指针指向一维数组,别指向二维的,我觉得是这个问题
2017-03-26 07:55
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
8
楼
得分:0
不能执行是因为,第二字符串太大,你把数组第二维改成10就解决了。
当然,对于需要初始化的字符串,为什么要用数组?多余,直接用指针就好了。
创建在程序运行时需要修改的字符串,才需要用数组,但是对于这样的数组,又何必初始化?
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 08:09
吹水佬
等 级:
版主
威 望:
432
帖 子:10064
专家分:41463
注 册:2014-5-20
第
9
楼
得分:0
回复 3楼 peter张
先要理解指针的两个重要特性:地址和大小。
地址...是指针表达的存储数据的地方。
大小...是指针表达的存储数据地方大小。
就此话题来说:
先看看 char **p;
p指针的地址属性是一个存放地址值的地方;p指针的大小属性是这个地方的大小,大小要看编译器环境:
设p的地址 0x100000。
16位编译为2Byte,p+1的地址 0x100002。
32位编译为4Byte,p+1的地址 0x100004。
64位编译为8Byte,p+1的地址 0x100008。
再看看 char str[][10]={"hello ","c program"};
str是数组名,表达的是数组的首址,具有指针的性质。
str的地址属性是一个存放一组数据的地方;str的大小属性是这个地方的大小,大小是10Byte。
设str的地址 0x100000。
str+1的地址 0x10000A。
str+2的地址 0x100014。
可见,用char **p通过p+1来表达str+1不切实际,除非是很确定p+i==str+i(硬来的)。
2017-03-26 08:48
peter张
等 级:
论坛游民
威 望:
1
帖 子:56
专家分:98
注 册:2017-3-7
第
10
楼
得分:0
回复 4楼 forever74
谢谢,学习到了。
2017-03-26 09:35
13
1/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-475493-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.747177 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved