指针与数组详解(笔试易混题)

举例:

#include <bits/stdc++.h>
using namespace std;



int main() {
	
	const char* str1 = "hello,world";
	char str2[15] = "hello,world";
	char str3[12] = { 'h','e','l','l','o',',','w','o','r','l','d' };
	char str4[] = "hello,world";

	cout <<"str1输出:" <<str1 << endl;
	cout << "str2输出:" << str2 << endl;

	cout << "sizeof(str1):" << sizeof(str1) << endl;
	cout << "sizeof(str2):" << sizeof(str2) << endl;
	cout << "sizeof(str3):" << sizeof(str3) << endl;
	cout << "sizeof(str4):" << sizeof(str4) << endl;

	cout << endl;

	cout << "strlen(str1):" << strlen(str1) << endl;
	cout << "strlen(str2):" << strlen(str2) << endl;
	cout << "strlen(str3):" << strlen(str3) << endl;
	cout << "strlen(str4):" << strlen(str4) << endl;


	return 0;
}

const char* str1 = “abcde”;
char str2[] = “abcde”;
char str3[8] = {‘a’ };
char str4[] = “123456789”;

在这里插入图片描述

  • str1是一个指针,指向字符串"abcde"。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个指针所占的空间。
  • str2是一个字符型数组,对于一个数组,返回这个数组所占的总空间,所以sizeof(str2)取得的是字符串"abcde"的总空间。"abcde"中,共有a
    b c d e \0六个字符,所以str2数组的长度时6。
  • str3已经定义成了长度为8的数组,所以sizeof(str3)为8;
  • str4和str2类似,共十个字符,所以str4所占的空间是10.

strlen为字符串长度,用法:int strlen(char * str),返回字符的个数

从原理理解char str1="abcde"和char str2[]="abcde"的区别

1.首先我们需要了解它们分别代表着什么

char *str1 = “abcde”(此时定义的为字符串常量)
char str2[] =“abcde”(此时定义的为字符数组)
在这里插入图片描述

str1是一个指针,其初值指向一个字符串常量,其可以被修改以指向其他地址,无法修改字符串的内容
str2[]是一个数组,存放初始化字符串及’\0’的一维数组,其始终指向同个存储地址,但可修改字符串内容

2.实际应用中的不同点

(1)如果我们想将“abcde"中的’a’修改为’x’,我们可能会这样做
str1[0]=‘x’//error
str2[0]=‘x’//ok
原因在于str1为指针只能改变其指向地址,str2为数组可改变其内容
————————————————
版权声明:本文为CSDN博主「Vvaaz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Vvaaz/article/details/89281804

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值