免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2141 | 回复: 16
打印 上一主题 下一主题

关于指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-13 08:23 |只看该作者 |倒序浏览
某一特定数据类型的指针只能指向相同的数据类型的变量,如字符型的指针只能指向字符型变量.实际上所有的指针都是整型变量.

请问这前后两句话是不是有矛盾?

论坛徽章:
0
2 [报告]
发表于 2003-03-13 09:36 |只看该作者

关于指针

所有的指针都是整型变量
——意思应该是指针变量本身是整数,不会是浮点型,字符型……
因为指针指向的是内存地址,内存地址只可能是整数,用不着浮点型……
嘿嘿

论坛徽章:
0
3 [报告]
发表于 2003-03-13 10:29 |只看该作者

关于指针

糊涂ing........
既然指针存放的是整型数,那指针的类型也应该是整数才对呀.就像声明一个整形变量只能存放整形数一样.

指针存放的是整型数
但是这个整型数的值是指向的变量的地址

编译器见到指针时也会把指针保存的整型变量解释成地址
这样明白了吗

const char *p="abcde";
"abcde"是一个常量字符串,上面的代码是把abcde的地址给p

当编译器见到 P 时
会把p 解释成 "abcde"

见到*p时,把p解释成 p[0]

论坛徽章:
0
4 [报告]
发表于 2003-03-13 10:31 |只看该作者

关于指针

你可以把指针的内容和指针的地址打印出来就会明白
例如:
char ss[10]="abcd";
char *p;
p=ss;
printf("p1=[%s],p2=[%d]\n",p,p);

论坛徽章:
0
5 [报告]
发表于 2003-03-13 10:56 |只看该作者

关于指针

这里说的指针的内容不是指针的内容,而是指针指向的内容吧?

论坛徽章:
0
6 [报告]
发表于 2003-03-13 11:53 |只看该作者

关于指针

可能意思是指针所在的地址是整型

论坛徽章:
0
7 [报告]
发表于 2003-03-13 12:47 |只看该作者

关于指针

指针是用来指向地址的
在内存中保存方式是一个int 类型
这个int 类型值是指针指向的地址
这是指针自己的保存信息


指针指向的变量类型由编译器检查
因为不同类型的sizeof不一样
同时解释也不一样
如 int a=0x01020304
和  char a[4]={"aaa"};
都是保存成4个字节

但是解释的话
一个看成是整数
另一个看成是字串符

论坛徽章:
0
8 [报告]
发表于 2003-03-18 08:05 |只看该作者

关于指针

请看一下下面的代码:
char *const pc="adsf";
用asdf对指针pc进行初始化,这对吗?
pc是指针,存放的应该是地址,而且我在输出pc和*pc时,pc=asdf,*pc=a
又糊涂了

论坛徽章:
0
9 [报告]
发表于 2003-03-18 09:05 |只看该作者

关于指针

从定义可以看出了
char * pc = "adsf";
所以pc的类型是char *
而*pc的类型是char

你输出pc和*pc时
用的应该是
printf("pc=%s,*pc=%c", pc, *pc);

所以输出是pc=asdf,*pc=a

没错,pc是指针,存放的是地址
但是你用%s输出,表示输出pc为首地址的字符串

改成
printf("pc=%x, *pc=%c", pc, *pc);
看看,就可以得到pc所保存的字符串的首地址了

论坛徽章:
0
10 [报告]
发表于 2003-03-18 09:20 |只看该作者

关于指针

char *const pc="adsf";     // const指针, 非const数据

对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const,还有,两者都不指定为const:

char *p              = "hello";          // 非const指针,
                                         // 非const数据

const char *p        = "hello";          // 非const指针,
                                         // const数据

char * const p       = "hello";          // const指针,
                                         // 非const数据

const char * const p = "hello";          // const指针,
                                         // const数据

语法并非看起来那么变化多端。一般来说,你可以在头脑里画一条垂直线穿过指针声明中的星号(*)位置,如果const出现在线的左边,指针指向的数据为常量;如果const出现在线的右边,指针本身为常量;如果const在线的两边都出现,二者都是常量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP