C++数组and指针

1、数组基本概念:

数组是具有相同类型的一些元素顺序排列所构成的集合


存储类型 元素类型 数组名 [][][…] = {初始化数据表};


数组三要素:

数据类型、首地址、元素个数


C++编译器并不检查访问数组时的下标是否越界。


2、C++中的C字符串:用数组表示字符串: 

C++规定“字符串结束标志”为“\0”     char c[] = {"i am a boy"}; 等价于char c[] = "i am a boy"; 等价于char c[10] = {'i',' ','a','m',' ','a',' ','b','o','y','\0'}; 

#include "stdio.h"

int main(){

//	char s[] = "i am a boy";
//	char s[] = {"i am a boy"};
	char s[] = {'i',' ','a','m',' ','a',' ','b','o','y','\0'};
	puts(s);

	return 0;
}


可以用标准 C I/O中的

gets()STDIN(标准输入)读取一个字符串

读取一个字符串到一个字符数组中。

与之对应的是:

puts()写一个字符串到STDOUT(标准输出)
期间可以用标准 C String & Character 操作:

atof()

将字符串转换成浮点数

atoi()

将字符串转换成整数

atol()

将字符串转换成长整型数

isalnum()

当字母或数字字符时, 返回真值

isalpha()

当字母字符时, 返回真值

iscntrl()

当控制字符时, 返回真值

isdigit()

当数字字符时, 返回真值

isgraph()

当非空格可打印字符时, 返回真值

islower()

当小写字母字符时, 返回真值

isprint()

当可打印字符时, 返回真值

ispunct()

当标点字符时, 返回真值

isspace()

当空格字符时, 返回真值

isupper()

当大写字母字符时, 返回真值

isxdigit()

当十六进制字符时, 返回真值

memchr()

在某一内存范围中查找一特定字符

memcmp()

比较内存内容

memcpy()

拷贝内存内容

memmove()

拷贝内存内容

memset()

将一段内存空间填入某值

strcat()

连接两个字符串

strchr()

查找某字符在字符串中首次出现的位置

strcmp()

比较两个字符串

strcoll()

采用目前区域的字符排列次序来比较字符串

strcpy()

拷贝字符串

strcspn()

在某字符串中匹配指定字符串

strerror()

返回错误码对应的文本信息

strlen()

返回指定字符串的长度

strncat()

连接某一长度的两个字符串

strncmp()

比较某一长度的两个字符串

strncpy()

复制某一长度的一个字符串到另一字符串中

strpbrk()

查找某字符串在另一字符串中首次出现的位置

strrchr()

查找某字符在字符串中末次出现的位置

strspn()

返回子串的长度,子串的字符都出现包含于另一字符串中

strstr()

在一字符串中查找指定的子串首次出现的位置

strtod()

将字符串转换成浮点数

strtok()

查找指定字符之前的子串

strtol()

将字符串转换成长整型数

strtoul()

将字符串转换成无符号长整型数

strxfrm()

转换子串, 可以用于字符串比较                             

tolower()

将字符转换成小写字符

toupper()

将字符转换成大写字符


C++对char[]给予的特殊关照:http://blog.csdn.net/huangjing_whlg/article/details/22424753


3、指针之运算符

&:取地址运算符
*:取目标内容运算符 or 取内容运算符 or 间接访问运算符


4、指针之地址偏移

地址值与整数n相加减得到的新地址是在原地址上增加或减少n*sizeof(数据类型)字节地址

两个目标数据类型相同的指针相减可以得到这两个地址值之间存放该种数据类型的数据的个数


5、动态变量和动态数组—堆变量和堆数组

关于堆:

1、堆是程序数据区的一种内存结构(另外两种是 栈、全局数据区);

2、堆是一种可以按需分配、随取随用、用后归还的一种系统资源;它不属于某一个程序私有,而是所有程序公用的。

3、申请堆内存空间的运算符为new,释放堆内存delete

#include <iostream>
using std::cout;
using std::endl;

int main(){

	int *a = new int;//系统从堆内存中切下一块sizeof(数据类型)字节大小的空间,返回**地址**
	*a = 1;
	cout<<*a<<endl;

	int n = 5;//动态申请的数组长度是可变的,可按需分配
	int *arr = new int[n];//系统从堆内存中切下一块sizeof(数据类型)*5字节大小的空间,返回**地址**
	for(int i = 0;i<n;i++){
		arr[i] = i;
	}
	for(i = 0;i<5;i++){
		cout<<arr[i]<<" ";
	}
	cout<<endl;
	
	//注意:如果返回不成功,则返回的地址值为null

	delete a;//释放堆变量
	delete [] arr;//释放堆数组

	//由于堆变量、堆数组的生命周期取决于new和delete的时机,因此:堆变量被称为动态变量,堆数组被称为动态数组,堆内存空间被称为动态内存

	return 0;
}

6、指针数组 & 数组指针


a、指针数组

int a = 1,b = 2;c = 3;

int * pointerArr[3] = {&a,&b,&c};


b、数组指针

const int N = 4;

int a[4] = {1,2,3,4};

int (*arrPointer)[4]=a;


#include "stdio.h"
#include "string.h"

struct Stu{
	int id;
	char name[10];
};

int main(){	

	Stu * ps = new Stu;
	ps->id = 1;
	strcpy(ps->name,"hahah");

	Stu s = *ps;
	s.id = 2;
	strcpy(s.name,"lallala");

	Stu * _ps = &s;

	printf("地址:%d , id:%d , name:%s\n",	ps,	ps->id,	ps->name);
	printf("地址:%d , id:%d , name:%s\n",	&s,	s.id,	s.name);
	printf("地址:%d , id:%d , name:%s\n",	_ps,	_ps->id,	_ps->name);

	return 0;
}

地址:6164232 , id:1 , name:hahah
地址:1244980 , id:2 , name:lallala
地址:1244980 , id:2 , name:lallala
Press any key to continue








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值