文章目录
1、指针和二维数组
如果定义二维数组:
T a[N][M];
-
a [ i ] a[i] a[i] 是一个一维数组
-
a [ i ] a[i] a[i] 的类型是
T*
-
sizeof(a[i]) = sizeof(T) * M
-
a [ i ] a[i] a[i] 指向的地址:
数组 a 的起始地址 + i * M * sizeof(T)
void Reverse(int * p , int size) { for(int i = 0; i < size / 2; i++) { int tmp = p[i]; p[i] = p[size - i - 1]; p[size -i - 1] = tmp; } } int a[3][4] = { { 1 , 2 , 3 , 4} , { 5 , 6 , 7 , 8} , { 9 , 10 , 11 , 12}}; Reverse(a[1] , 4); =>{ { 1 , 2 , 3 , 4} , { 8 , 7 , 6 , 5} , { 9 , 10 , 11 , 12}}; //二维数组在内存中是连续存放的。 Reverse(a[1] , 6) =>{ { 1 , 2 , 3 , 4} , { 10 , 9 , 5 , 6} , { 7 , 8 , 11 , 12}};
2、指向指针的指针
-
定义:
T ** p
-
p p p 是指向指针的指针, p p p 指向的地方应该存放着一个类型为
T *
的指针,*p
的类型是T *
#include<iostream> using namespace std; int main() { int **pp; //指向int*类型指针的指针 int *p; int n = 1234; p = &n; //p指向n pp = &p; //pp指向p cout << *(*pp) << endl; return 0; }
3、指针和字符串
-
字符串常量的类型就是
char *
-
字符数组名的类型也是
char *
#include<iostream> using namespace std; int main() { //p指向的就是一片空间,这个空间存放的就是please input your name char *p = "Please input your name:\n"; cout << p; char name[20]; char *pName = name; cin >> pName; cout << "Your name is " << pName; return 0; }
-
字符数组名的类型也是
char *
,就是一个地址。char name[20]; int n; scanf("%d%s", &n , name);//&n改为n,编译不会出错,但是此时n的内容就被当做一个地址,但实际他不是一个有效地址。 cin >> n >> name;
4、字符串操作库函数
函数名称 | 功能 |
---|---|
strcat | 将一个字符串连接到另一个字符串后面 |
strchr | 查找某字符在字符串中最先出现的位置 |
strrchr | 查找某字符在字符串中最后出现的位置 |
strstr | 求子串的位置 |
strcmp | 比较两个字符串的大小(大小写相关) |
stricmp | 比较两个字符串的大小(大小写无关) |
strcpy | 字符串拷贝 |
strlen | 求字符串长度 |
strlwr | 将字符串变成小写 |
strupr | 将字符串变成大写 |
strncat | 将一个字符串的前n个字符连接到另一个字符串后面 |
strncmp | 比较两个字符串的前n个字符 |
strncpy | 拷贝字符串的前n个字符 |
strtok | 抽取被指定字符分隔的子串 |
atoi | 将字符串转换为整数(在cstdlib中声明) |
atof | 将字符串转换为实数(在cstdlib中声明) |
itoa | 将整数转换为字符串(在cstdlib中声明) |
-
char * strchr(const char * str , int c);
寻找字符 c c c 在字符串 s t r str str 中第一次出现的位置。如果找到,就返回指向该位置的 c h a r ∗ char* char∗ 指针;如果 s t r str str 中不包含字符 c c c,则返回 N U L L