指针与数组 (笔记)
字符数组初始化的一种方法:
char str[] = {"I am happy!"};
也可以省略花括号{}
char str[] = "I am happy!";
只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句讲一个字符串常量或者字符数组直接复制为一个字符数组:
str1 = “china”;//错误
str1 = str2;//错误
strcpy(str1, str2);
strcpy(str1, "china");
以上是用字符数组存放字符串,另外, C++ 定义了一种新的数据类型——字符串类型(string)要使用string类的功能时,必须在文件开头将c++标准库中的string头文件包含进来,
#include<string> //注意不是<string.h>
string string1;
string1 = "Canada";
也可以:string1 = string2;
string1 = string2+string1;
也可以用==,>,<,!=等关系运算符来进行字符串的比较。
----------------
指向数组元素的指针:
int a[10];
int *p = a;
则p就是一个指向数组的指针。
对一个数组元素的引用可以是:1、下标法 a[i] ;2、指针法 *(a+i)或*(p+i)
使用指针法能使目标程序质量高。p可以指向有效地数组元素,也可以指向数组以后的内存单元。
数组名与指针之间有一个重要的不同之处,指针是一个变量,p = a 和 p++ 都是合法的,但数组名不是变量,类似的a = p 和 a++都是非法的。
用指针变量作函数参数接收数组地址:
void abc(int array[],int i);
等价于 void abc (int * array, int i);
-----------
多维数组与指针:
int a [3][4];
a,代表首行起始地址,a+1代表a[1]行首地址,即&a[1]
a[1]的值是&a[1][0];a[2]的值是&a[2][0];
a[0]+1即为 &a[0][1];
------------------
字符串与指针:
C++中有三种方法访问一个字符串:
1、字符数组
char str[] = "I love CHINA!";
cout<< str<<endl;
2、字符串变量:
string str = "I love CHINA!";
cout << str<< endl;
3、用字符指针指向一个字符串:
char *str = "I love CHINA!";//等价于 char *str; str = "I love CHINA!";
cout <<str <<endl;
----------
用函数指针变量调用函数:
指针变量也可以指向一个函数,一个函数在编译时被分配给一个入口地址,这个函数的入口地址就叫做函数的指针。
int (*p) (int ,int );
函数指针变量常见的用途之一是作为函数的参数,将函数名传给其他函数的形参。这样就可以在调用一个函数的过程中,根据给定的不同实参调用不同的函数。
-----------
返回指针值的函数:
int *a (int x , int y);
----------------------
指针数组:一个数组,其元素均为指针类型,则该数组称为指针数组。
int *p[4];
指针数组的一个重要优点在于,数组的每行长度可以不同。
char *name[] = {"illegal month","jan","feb","mar"};
浙公网安备 33010602011771号