数组和指针

数组和指针的区别

数组名是数组第一个元素的地址,它是一个地址常量。对于常量,递增符号是不能使用的,因此操作数组ar[],ar++或者++ar都是非法的;而指针是一个变量,它指向数组第一个元素的地址,是可以通过指针操作变更指向地址的,因此对于指针变量p,p++++p都是可以使用的。

字符串。C一般用数组存储字符串,数组和指针都能定义。当定义一个字符串时,字符串的内容将会自动拷贝一个副本到静态内存中,并为它分配地址。数组定义的字符串,是将静态内存中副本直接拷贝过来;而指针定义的字符串则存储的是静态内存中该字符串第一个字面量的地址。当程序需要多次使用相同的字符串时,就会直接在静态内存中引用它。此时,对指针定义的字符串进行修改,则会直接导致程序中各处引用发生变更,也就是“牵一发而动全身”。若不想修改字符串内容,则直接用数组定义就好了。示例如下:

int main(){
	char *p="JERRY";
	p[0]='M';
	printf("JERRY");
	printf(" IS %s","JERRY");
}

该程序输出为 MERRY IS MERRY
因为字符串字面量"JERRY"就是它在静态内存中的地址,指针p也指向了它,程序第三行直接修改了静态内存中"JERRY"的第一个元素,因此在后面从静态内存中获取该段地址时,其保存的内容已经发生改变。

指针数组和二维数组指针

定义上,指针数组char *ch[ROWS],二维数组指针char(*ch)[COLS],前者是数组,后者是指针。

指针数组一般用于定义字符串数组,本质上就是内含了ROWS个指针的数组,每个指针指向所在行第一个元素的地址。同样,指针数组是地址常量。

二维数组指针ch则是指向二维数组第一行地址的指针。第一行的地址和第一个元素的地址相同。

指针数组包含ROWS个指针,本质上是数组,二维数组指针本质上是指针变量。用指针数组定义二维数组和用二维数组指针定义二维数组,类似于定义数组和用指针定义数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值