c++怎么输出数组的值而不是地址,c语言怎么显示数组
#包含stdio.h
int main(void) {
int I;
int a[5]={
1, 2, 3, 4, 5
}
;
int * p=a;
//p指向a[0]
for(I=0;i5;i ) {
printf( a[% d]=% d *(a % d)=% d p[% d]=% d *(p % d)=% d \ n ,I,a[i],I,*(a i),I,p[i],I,*(p I));
}
for(I=0;i5;i ) {
printf( a[% d]=% p a % d=% p p[% d]=% p p % d=% p \ n ,I,a[i],I,(a i),I,p[i],I,(p I));
}
}运行结果:
#包含stdio.h
int main(void) {
int I;
int a[5]={
1, 2, 3, 4, 5
}
;
int * p=a[2];
//p指向a[2]
for(I=0;i5;i ) {
printf(a[%d]=%d *(a %d)=%d\n ,I,a[i],I,*(a I));
}
puts(-);
for(I=-2;i3;i ) {
printf(p[%d]=%d *(p %d)=%d\n ,I,p[i],I,*(p I));
}
puts(-);
puts(-);
for(I=0;i5;i ) {
printf(a[%d]=%p a %d=%p \n ,I,a[i],I,(a I));
}
puts(-);
for(I=-2;i3;i ) {
printf( p[%d]=%p p %d=%p\n ,I,p[i],I,(p I));
}
}运行结果:
数组正确地指向数组中的元素。
int a[5]={1,2,3,4,5 };
int * p=a;//p指向一个[0]数组是错误的,指向数组中的一个元素。
int a[5]={1,2,3,4,5 };
int * p=a[2];//无法赋值,因为:a[2]的类型是int,而P的类型是int *。它们是不同的,不能互相分配!
在以下两种情况下,数组名不会被视为指向其实际元素的指针。
当作为sizeof运算符的操作数出现时
Sizeof(数组名)不生成指向开始元素的指针的长度,而是生成整个数组的长度。当作为寻址操作符的操作数出现时
数组名不是指向起始元素指针的指针,而是指向整个数组的指针。如果指针操作符*写在指向数组中元素的指针p i之前会发生什么?
因为p i是指向p所指向的元素之后第I个元素的指针,所以在它之前加上指针运算符得到的*(p i)就是该元素的别名。因此,如果p指向a[0],那么表达式*(p i)代表a[i]本身。
总结:
当指针P指向数组中的元素E时,
*(p i)指向元素e之后的第I个元素,可以写成p[ i]。
*(p-i)指向E元素之前的第I个元素,可以写成p[-i]。当数组A中的元素个数为n时,组成数组A的元素为a[0]到a[n-1],共“n”。但是,指向数组元素的指针可以是a[0]到a[n],总共有“n-1”。之所以会出现这种情况,是因为在判断遍历数组元素的结束条件(是否已经到达末尾)时,使用指向最后一个元素之后的元素的指针非常方便。当Type*指针P指向类型数组A的起始元素a[0]时,指针P的行为就像数组A本身一样。数组的下标表示元素在开始元素之后的位置,因此它必须从0开始。注意:
虽然整数可以加到指针上,但是指针之间的减法是不可能的。指针之间的减法是可能的。正确分配数组的示例
int *p
int x[5];
p=x;//正确的赋值数组,错误的赋值示例
int a[3]
int b[3];
a=b;//错误赋值赋值表达式的左操作数不能是数组名。
准确地说,指向数组开始元素的指针不能通过使用赋值运算符来更改。
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。