0
点赞
收藏
分享

微信扫一扫

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

千行 2022-05-03 阅读 90

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

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

非字符数组

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]; //指向字符数组的指针
……//指向各种类型
👆里面每个格子里存的都是字符,a指向这个数组的首地址,可以用a遍历访问数组内容,作用和数组名差不多,但这里的a可以++,是变量

举报

相关推荐

0 条评论