这几天上数组与指针时,对于这三个概念一直都很模糊。什么地址常量不可以运算,什么指针加一就是加四个字节等等...
1.
#include<stdio.h>
int main(void)
{
int a[3][4],b[3];
printf("sizeof(a)is:%d/n",sizeof(a));
printf("sizeof(a+0)is:%d/n",sizeof(a+0));
printf("sizeof(b)is:%d/n",sizeof(b));
printf("sizeof(b+0)is:%d/n",sizeof(b+0));
getchar();
}
结果是48,4,4,12,4
2.
#include<stdio.h>
int main(void)
{
int a[]={1,2,3,4,5},*p=a,i;
printf("%p/n",&a);
printf("%p/n",&a+1);
printf("%p/n",&a[0]);
printf("%p/n",&a[0]+1);
printf("%p/n",&a[1]);
getchar();
}
结果是0022ff20,0022ff34,0022ff20,0022ff24,0022ff24,
3.
#include<stdio.h>
int main(void)
{
int *p,a[2]={1,2};
p=a ;
printf("%d/n",*p++); //ok
printf("%d/n",*a++); //error
printf("%d/n",*(0x0022FF38));//error
getchar();
}
结果 编译出错:error1: ISO C++ forbids cast to non-reference type used as lvalue 。non-lvalue in assignment
error2: invalid type argument of `unary *'