数组指针与指针数组的关系与区别 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    数组指针与指针数组的关系与区别

    数组与指针的概念:

    数组要么在静态存储区被创建(如全局数组),要么在栈上被创建,

数组指针与指针数组的关系与区别

。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

    指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。

    数组指针:(*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个元素

    小结:

    指针数组与数组指针的区别在于,数组指针可以直接赋值,而指针数组则不可以,

电脑资料

数组指针与指针数组的关系与区别》(https://www.unjs.com)。

    它们的相同之处在于,在使用时,都可以用指针或数组的形式。

    数组与指针的区别(易出错地方):

    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的地址是否相同

最新文章