指针与数组的关系
一维数组的长度
- 数组不定义长度初始化
#include<stdio.h>
int main(){
int a[]={12,34,65,9};
int *p;
printf("length is %d\n",sizeof(a)/sizeof(int));
return 0;
}
- 数组定义长度初始化
#include<stdio.h>
int main(){
int a[5]={12,34,65,9};
int *p;
printf("length is %d\n",sizeof(a)/sizeof(int));
return 0;
}
- 部分初始化
#include<stdio.h>
#include<stdlib.h>
void f(int *,int);
int main(){
int a[5]={12,345,6,756};
int *p;
int len;
len=sizeof(a)/sizeof(int);
f(a,len);
printf("length is %d\n",sizeof(a)/sizeof(int));
return 0;
}
void f(int *p,int len){
int i;
for(i=0;i<len;i++){
printf("%d ",p[i]);
}
printf("\n");
return;
}
- 不初始化
#include<stdio.h>
#include<stdlib.h>
void f(int *,int);
int main(){
int a[5]={12,345,6,756};
int b[4]={};
int *p;
int len;
len=sizeof(b)/sizeof(int);
f(b,len);
printf("length is %d\n",sizeof(b)/sizeof(int));
return 0;
}
void f(int *p,int len){
int i;
for(i=0;i<len;i++){
printf("%d ",p[i]);
}
printf("\n");
return;
}
不初始化,运行结果在VC++上面是垃圾值,在DEV-C++上面是0
指针与数组的关系
int a[4]={8,34,21,5};
int *p;
p=a;
*(p+i)==p[i]
i是偏移量,当i=1时,向右移动四个字节,所以
*(p+i)==p[i]
这时的p[i]=p[1]值为34,指针p指向34