2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > char二维数组_C语言指针与数组详解

char二维数组_C语言指针与数组详解

时间:2023-03-29 13:27:16

相关推荐

char二维数组_C语言指针与数组详解

指针与数组

指针可以与变量结合,也可以与数组结合使用。指针数组和数组指针是两个截然不同的概念,指针数组是一种数组,该数组存放的是一组变量的地址。数组指针是一个指针,表示该指针是指向数组的指针。

1.指向数组元素的指针

int a[5]={1,2,3,4,5};

int *p=a; //int *p=&a[0];

如上代码,指针变量p指向了a数组的首元素,其方法可有两种,int *p=a或int *p=&a[0];

注意:指针变量的类型应与指针所指向的变量的类型一致,如下代码会报错

/*int*p;floatx=3.14;指针变量的类型应和所指向的变量类型一致。p=&x;否则会报错*/

与整型、浮点型数据一样,指针也可以进行算术运算,但含义却不同。当一个指针加一或减一并不是使指针增加1或减少一,而是使指针所指向的位置向后或向前移动了一个位置。例如执行a=a+3,如果一个整型占用4个字节,则相加后a=2000+4*3=(这里假设指针a的初值为2000)。同样指针也可进行自加自减运算。

也可以用一个指针变量减去另一个指针变量,具体看如下代码和结果:

int *p,*q,b; int shuzu[6]={0,1,2,3,4,5}; p=shuzu,q=&shuzu[3]; printf("p和q两指针的地址分别为:%d %d",&p,&q); printf("\np和q两指针的值为(即所指向元素的地址为):%d %d",p,q); b=p-q; printf("\nb的值为:%d ",b); //b=两指针值相减的差除以4

结果为:

2.指针数组

指针数组其实也是一个数组,只是数组中的元素是指针类型的数据。换句话说,指针数组中的每一个元素都是一个指针变量。

定义指针数组的方式如下:

int *p[4];

由于[ ]运算符优先级比*高,p优先与[ ]结合,从而形成一个数组,然后再与*结合,表示该数组是指针类型的,每个数组元素是一个指向整型的变量 。

指针数组常常用于储存一些长度不等的字符串数据,有的读者可能会问,为什么不存放在二维数组中?因为如将这些字符串若放在二维数组中,就需要定义一个能容纳最长字符串的数组长度,这样就会浪费一些空间。下面看我的代码,上面有注释。

#includeint main(){/*二维数组方式存放长度不一的字符串 */ int i,n=2; char shuzu[2][9]={"my love","my hobby"}; //9为最小长度,不然报错,数组[1]别忘了末尾有个'\0', //所以长度为8+1=9 printf("%s\n",shuzu); puts(shuzu[1]); //puts(shuzu)会报错 /* 指针数组存放长度不一的字符串*/ char *s[2]={"my love","my hobby"}; for(i=0;i<2;i++) printf("第%d个元素为:%s\n",i,s[i]); char *p;// for(p=s[0];p// printf("%s",p);/*p自加后并不是往后移了一个单位*/ p=s[0]; printf("%s\n",p); p++; printf("%s\n\n",p); /*正确方式1*/ printf("\n通过指向数组的指针输出字符串:\n"); for(p=s[0],i=0;i {printf("第%d个字符串:%s\n",i+1,p); i++; } /*正确方式二*/ printf("\n用数组名输出指针数组:\n"); for(i=0;i<2;i++) printf("%s\n",s[i]);}

运行结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。