数组指针与指针数组的关系与区别
数组与指针的概念:
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。
数组指针:(*p)[4]
指针数组:*p[4]
int b[3][4]={2,4,6,8,10,1,3,5,7,9,0,11};
int (*a)[4];
//a=b;//数组指针可以这样赋值,因为a是一个指针,但若a是一个数组则不能这样赋值
int i,j;
//用数组指针打印打印数组
//方法一
for(i=0;i<3;i++)
for(j=0;j<4;j++)
//printf("%3d",a[i][j]);
//printf("%3d",*(*(a+i)+j));//输出a[i][j]
//方法二
for(i=0;i<12;i++)
printf("%3d",*(*a+i));//输出数组中的第i个元素
int *c[4];//指针数组
//c=b;//不能这样用
//应当这样给指针数组赋值
for(i=0;i<3;i++)
c[i]=b[i];
//打印数组内容
//方法一
for(i=0;i<3;i++)
for(j=0;j<4;j++)
//printf("%3d",*(*(c+i)+j));
//printf("%3d",c[i][j]);
//方法二
for(i=0;i<12;i++)
printf("%3d",*(*a+i));//输出数组中的第i个元素
小结:
指针数组与数组指针的区别在于,数组指针可以直接赋值,而指针数组则不可以。
它们的相同之处在于,在使用时,都可以用指针或数组的形式。
数组与指针的区别(易出错地方):
1.常量字符串的内容是不可以被修改的!
char a[]="hello";
a[0]=‘x‘;
printf("%s",a);//输出xello
char *p="hello";//p指向常量字符串
p[0]=‘x‘;
printf("%s",a);//报错,常量字符串的内容是不可以被修改的
2.内容赋值与比较
char a[]="hello";
char b[10];
//b=a;//错误
strcpy(b,a);//将字符串a拷贝给b,不能用b=a
if(strcmp(b,a)==0)
//比较a,b字符串是否相等,不能用if(a==b)
int len = strlen(a);
char *p = (char *) malloc (sizeof(char));
//p=a;//将a的首地址赋值给指针变量p
strcpy(p,a);//将a数组的内容赋值给指针变量p
if(strcmp(b,a)==0)//判断a,b内容是否相等
//if(p=a)//判断p和a的地址是否相同
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。