C语言基础知识之数组指针和指针数组

指针和数组的区别

         首先我们编写如下代码:

	#include<stdio.h>
	#include<stdlib.h>
	 
	int main(){
   
		char *s1 = "hello";
		char *s2 = "hello";
		char a1[] = "hello";
		char a2[] = "hello";
		printf("%p %p %p %p \n",s1, s2, a1, a2);
		return 0;
	}

         程序运行结果:
数组和指针运行结果
         从结果可以看出,第一个和第二个 “hello” 的地址都为 “0000000000404000” ,原因是这个时候的数指针指向的 “hello” 为字符串常量,它存放在静态存储区(静态存储区的特点是,内存从分配之后一直到程序结束才会被回收),因此,对于两个 “hello” 这样的字符串常量它的值是一样的,所以 s1、s2 实际指向的是同一个 “hello” ,因此看到的地址是相同的;对于 a1、a2 而言,它们是局部变量,放在上,栈上的内容是可以随时修改的,它们是指向两个不同的 “hello” ,它的值可以改为其它内容,因此这里一共有 3 个 “hello”。

	*s1 = ‘H’;  // 错误,*s1 为字符串常量,不可以修改
	*a1 = ‘H’; // 正确,a1[]为局部变量,可以修改
	s1++;       // 正确,s1 是地址变量,可以修改
	a1++;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值