免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lxfjr
打印 上一主题 下一主题

一个C的初级问题. [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-05 18:51 |只看该作者
用&取地址

论坛徽章:
0
12 [报告]
发表于 2008-08-05 19:42 |只看该作者
当printf前边的格式化语言对应后边的变量为%s时,变量被认为是一个指针。
就是说,当:
int a=0x33444; //whatever
printf("%s",a);
输出的是0x33444内存地址上的值,并直到找到一个'\0'。当然这很容易段错误,因为该地址内存的读写性是不确定的。
其他的类似,输出什么是由格式符和变量共同决定的。

论坛徽章:
0
13 [报告]
发表于 2008-08-05 20:07 |只看该作者
for (i=0;i<4;i++)
printf("%d\n",prt+i);

如上输出的是各字符串指针的地址
eg:2293600
     2293604
     2293608
     2293612

for (i=0;i<4;i++)
printf("%s\n",*(prt+i));
如上输出的就是各字符串的内容
chian
chengdu
sichuang
chongqing

论坛徽章:
0
14 [报告]
发表于 2008-08-05 20:29 |只看该作者
输出地址用%p

论坛徽章:
0
15 [报告]
发表于 2008-08-05 21:12 |只看该作者
prt是指针数组

论坛徽章:
0
16 [报告]
发表于 2008-08-05 23:19 |只看该作者
首先声明:
作为学生第一次见到这样定义指针的。
prt定义的是变量的地址,
可以说是指针数组。
printf("%s\n",prt);
作为变量的地址,
输出的应该是%d,
先这样,我以后补充。

论坛徽章:
0
17 [报告]
发表于 2008-08-05 23:34 |只看该作者
原帖由 lxfjr 于 2008-8-5 16:08 发表
谢谢!
#include
void main()
{
char *prt[4] = {"china","chengdu","sichuang","chongqin"};
char *p;
int *prt2[3],a[3]={1,2,3};
int i;
for (i=0;i



prt是指针数组,是一个存着字符串的数组,它是数组不是指针
char (*ptr)[5] 这种是指针,是字符数组的指针

"chian"本身是一个地址, ptr可以看作是这个地址的地址,
printf("%s\n",prt);   输出的不是数据,输出的可以说是一个二级地址,应该是%d
printf("%s\n",*prt);才是输出的字符串

你可以定义 char **p = prt;
printf("%s\n",*p);更清楚

[ 本帖最后由 奥丁@ 于 2008-8-5 23:55 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2008-08-10 16:39 |只看该作者
此处定义的prt是一个地址,用“%s”的形式得到的是该地址指向的内存的字符串表示。

我刚才进行了不同的测试,得到的输出结果不一样!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP