数据结构知识点辨析(一)

本文详细梳理了C++中数组、字符数组、字符指针及数组指针的基础概念与操作,包括非字符数组的初始化、字符串常量的处理、字符指针与字符数组的区别以及数组名的特性。特别强调了字符数组与字符串常量的赋值限制,以及指针数组和数组指针的使用场景。
摘要由CSDN通过智能技术生成

数据结构知识点辨析(一)

本文重点梳理总结一些容易忘的、容易混淆的小零碎知识点,希望对你有帮助!

非字符数组

double sales[5] = {12.25, 32.50, 16.90, 23, 45.68};
double sales[ ] = {12.25, 32.50, 16.90, 23, 45.68};
int list[5] = { 6, 5, 12 }; //相当于: int list[5] = {6,5,12,0,0};
int list[5] = {0}; //最常用的初始化数据组元素为0的方式

字符数组

char string[10] = “hello”;
char string[10] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
char string[ ] = “hello”;

第一种: 字符串常量,显式长度。(编译器会自动加‘\0’ ,所以长度要比字符串长度加一 )
第二种: 单个赋值,手动加‘\0’
第三种: 字符串常量,隐式长度。(编译器自动加‘\0’)

字符指针

一、字符串常量

对于字符串常量“hello”,可以把它堪称一个无名字符数组,编译器会自动给它分配空间存放这个常量,字符串常量的值是指向这个无名字符数组的第一个字符的指针,类型是字符指针。因此,printf(“hello”); 传递给函数的是指向第一个字符的指针。
由此可推断出:

	char s[]="hello"; 
	char *p;  //字符指针类型
	p=&s[0];  //或者写成 p=s;
	printf(p);

可以得到与 printf(“hello”); 一样的结果。

二、字符指针与字符数组

1、赋值PK

char *char_ptr , word[20] ;

char_ptr = " point to me " ;
👆把指向第一个字符的指针赋值给指针变量-----正确

word = " you can’t do this " ; //更正:strcpy(word,“……”);
👆直接把字符串常量赋给字符数组名------错误(word是个常量,不能赋值)

2、改值PK

char a[ ] = " hello " , *p = " hello " ;

a[0] = ’ b ’ ;
👆直接更改字符数组某一个位置的值------正确

p = ’ b ’ ;
👆直接改
p------错误(*p是常量,不能修改常量值)

数组名

数组名是常量指针,不能改变。

一维

int a[5] = {0,1,2,3,4};
其中a是指向0的整型指针,a+1指向1,a+2指向2……

二维

char a[4][5] = { “abcd”, “efgh”, “ijkl”, “mnop” };
在这里插入图片描述其中的a只能写加几,不能++,因为它自己不能变

指针数组VS数组指针

指针数组
char *a[10]; //由指向字符的指针构成的数组
int *b[10]; //由指向整型的指针构成的数组
……//指向各种类型
👆里面每个格子里存的都是指向字符类型的指针
注:也可以写为char *(a[10]);
数组指针
char (*a)[10]; //指向字符数组的指针
……//指向各种类型
👆里面每个格子里存的都是字符,a指向这个数组的首地址,可以用a遍历访问数组内容,作用和数组名差不多,但这里的a可以++,是变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值