Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14442932
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:42:24

下载本文示例代码
  基本解释  通过上一篇的分析,我们已经很清楚地知道:指针不是一个简单的类型,它是一个本身和所指向物相复合的类型。指针的算术运算(如步进)与指针所指向物的类型密切相关。   问题:指针步进 & 步进单位  下面的代码中打印出的结果是几? int arContext[5] ={0,1,2,3,4}, i, *pAr;pAr = arContext;printf ("%d\n", *(pAr 3 * sizeof (int)));  答案与分析:  这段代码没有正确答案,因为这段代码是错的,printf将打出无法预测的内存区的值,其中的原因如下:  在C语言中,指针总是按照它所指向的对象的大小步进。在上面的例子中,pAr是指向整数类型变量的指针,一个整数是4个字节(默认CPU字长是32位),pAr 1就指向下一个整数,也就是指针后移4个字节,而不是说将地址只移动一个字节。  因为C语言编译器知道每个指针的类型,因此对指针的运算是会自动把所指类型的Size考虑进去的。  pAr 3 * sizeof (int) = pAr 3 * 4 = pAr 12 ,因此pAr指向了数组的第13个整数元素。而数组本身才5个元素,pAr早已经超出了界限,所指向的地方当然就是无人可知道的东西了,具体指向什么东西,各种不同的编译器互不相同。总之,肯定不能打印出我们想要的值就是了。  指针不是一个简单的类型,它是一个和指针所指物的类型相复合的类型。因此,它的算术运算与指针所指物的类型密切相关,在C 语言中也是同样。  再比如下面的例子: int a[8];int* p = a;int* q = p 3;p ;  指针的加减并不是指针本身的二进制表示加减,要记住,指针是一个元素的地址,它每加一次,就指向下一个元素。所以: int* q = p 3;   q指向从p开始的第三个整数。  p ;   p指向下一个整数。共2页。 1 2 :   基本解释  通过上一篇的分析,我们已经很清楚地知道:指针不是一个简单的类型,它是一个本身和所指向物相复合的类型。指针的算术运算(如步进)与指针所指向物的类型密切相关。   问题:指针步进 & 步进单位  下面的代码中打印出的结果是几? int arContext[5] ={0,1,2,3,4}, i, *pAr;pAr = arContext;printf ("%d\n", *(pAr 3 * sizeof (int)));  答案与分析:  这段代码没有正确答案,因为这段代码是错的,printf将打出无法预测的内存区的值,其中的原因如下:  在C语言中,指针总是按照它所指向的对象的大小步进。在上面的例子中,pAr是指向整数类型变量的指针,一个整数是4个字节(默认CPU字长是32位),pAr 1就指向下一个整数,也就是指针后移4个字节,而不是说将地址只移动一个字节。  因为C语言编译器知道每个指针的类型,因此对指针的运算是会自动把所指类型的Size考虑进去的。  pAr 3 * sizeof (int) = pAr 3 * 4 = pAr 12 ,因此pAr指向了数组的第13个整数元素。而数组本身才5个元素,pAr早已经超出了界限,所指向的地方当然就是无人可知道的东西了,具体指向什么东西,各种不同的编译器互不相同。总之,肯定不能打印出我们想要的值就是了。  指针不是一个简单的类型,它是一个和指针所指物的类型相复合的类型。因此,它的算术运算与指针所指物的类型密切相关,在C 语言中也是同样。  再比如下面的例子: int a[8];int* p = a;int* q = p 3;p ;  指针的加减并不是指针本身的二进制表示加减,要记住,指针是一个元素的地址,它每加一次,就指向下一个元素。所以: int* q = p 3;   q指向从p开始的第三个整数。  p ;   p指向下一个整数。共2页。 1 2 : 下载本文示例代码


水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析水滴石穿C语言之指针步进辨析
阅读(148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~