指针常量
,存放的是一维数组第一个元素的地址int a[5]; int b[5]; a = b; //error,常量之间无法赋值 printf("%#X\n",&a[0]); printf("%#X\n",a); //二者相同
确定一个一维数组需要2个参数
数组名
和数组长度
p[i]
永远等价于*(p+i)
#include <stdio.h> //f函数可以输出任何一个一维数组的内容 void f(int * pArr,int len) // a是 int* 类型,所以pArr也要为 int* 类型 { for(i=0;i<len,i++) printf("%d",*(pArr+i)); //*(pArr+i)为第i+1个元素,等价于pArr[i] print("\n"); } /*如果p是个指针变量,则p[i]永远等价于(p+i)*/ int main(void) { int a[5] = {1,2,3,4,5}; int b[6] = {-1,-2,-3,4,5,-6}; int c[100] = {1,99,22,33}; f(a,5); // a是 int*类型 f(b,6); return 0; }
#include <stdio.h> void f(int * pArr,int len) { pArr[3] = 88; //p[i]永远等价于*(p+i) } int main(void) { int a[6] = {1,2,3,4,5,6}; printf("%d\n",a[3]); //4 f(a,6); printf("%d\n",a[3]); //88,p[i]永远等价于*(p+i) return 0; }
#include <stdio.h> int main(void) { int i = 5; int j = 10; int * p = &i; int * p = &j; // p-q,error,没有实际意义 int a[5]; p = &a[1]; q = &a[4]; printf("p和q所指向的单元相隔%d个单元\n",q-p); return 0; }
预备知识:
sizeof(数据类型)
功能:返回值就是该数据类型所占的字节
sizeof(数据名)
功能:返回值就是该变量所占的字节
例:sizeof(int)=4
char(1Byte)
类型变量int(4Byte)
类型变量double(8Byte)
类型变量#include <stdio.h> int main(void) { char ch = 'A'; int i = 99; double x = 66.6; char * p = &ch; int * q = &i; double * r = &x; printf("%d %d %d\n",sizeof(p),sizeof(q),sizeof(r)); //4,4,4,和编译器有关 return 0; }
结论:
一个指针变量,无论指向的变量占几个字节,该指针变量本身所占字节数一样大,且和编译器有关。