c语言中的数组

#include <stdio.h>

int main()
{
    char str[]={'a','k','m'};
    //char str[]="akm";//也是一样
	str[4]='p';
	//*(str+4)='p';//也是一样
	char *s=0;
	s=str;
	for(int i=0;i<5;i++){
		printf("s=%p \n",s);
		printf("*s=%c \n",*s);
		s++;
	}
}

输出结果:

s=0x7ffd8a263869 
*s=a 
s=0x7ffd8a26386a 
*s=k 
s=0x7ffd8a26386b 
*s=m 
s=0x7ffd8a26386c 
*s= 
s=0x7ffd8a26386d 
*s=p 

c语言的数组是一段连续的内存地址,如果是char数组,每个元素占用一位内存,所以可以用str[]中的str直接指向第一个元素的地址。在定义数组的时候,以0或者null结束,也就是说,在遍历数组的时候,遇到null时,认为数组已经结束。利用字符串定义数组的时候,系统会自动增加一个字符null,也就是说str[]=“akm”,实际上是有’a’, ‘k’, ‘m’, null,共四个元素。当按照指针值直接给第5个位赋值之后,直接用str[4]可以访问,但是因为str[3]是null,所以遍历数组的时候,到str[3]就结束了。
在Xcode中,用str[4]访问,会报错,认为超出数组下标,也就是说,Xcode会在添加元素的时候检查是否越界。
如果指针定义的是char *p,那么每次p++实际上是p=p+1,因为每个char占用1位。
如果指针定义的是int *p,那么每次p++实际上是p=p+4,因为每个int占用4位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值