1. 一个结构体变量的指针是该结构体变量所占据内存段的起始位置,形如:
struct 结构名 * 结构指针变量名
2. 赋值是把结构变量名首地址赋予该指针变量,访问结构变量名成员的常见方式为:
指针变量名->成员名
(*指针变量名).成员名
3. malloc返回的是一个指向分配域起始地址的指针,没有返回NULL
4. 字符串
(a) 直接对字符指针赋值
char *a="hello";
声明了一个字符指针*a后,将字符串常量“hello”的第一个字符的地址赋值给指针变量a
*a仅指向一个字符
(b) 字符串赋值给字符指针
char *p, a='5'; p=&a; p="abcd";
双引号的作用是在常量区申请空间存放字符串,并在字符串尾部加上'/0',然后将地址返回赋值给指针变量p
(c) 字符数组的初始化
char a[10]="hello";
初始化时可以对字符数组赋予初值,也可以通过下标对其元素进行访问,但不能通过下标对其直接进行修改
在这里字符数组的解析方式为:
char str[10] = {'h', 'e', 'l', 'l', 'o', '\0'};
可以对字符数组进行修改的方式是strcpy()函数,即:
char a[26]; strcpy(a, "catdog");
而当赋值给字符指针时,如:
char* ptr = "abc";
因为定义的是一个普通字符指针,并没有定义空间来存放"abc",所以编译器会将"abc"当成常量并把它放到程序的常量区
5. 字符指针的赋值
(a) 指向一个字符串常量
char *src = "abcded";
这种方式由系统自动给该字符指针指定了一个内存中的位置,如果此时再次对 src赋值: src = "mmmt", 则src指向另外一个由系统指定的内存块(由"mmmt"本身返回)
通过这种方式赋值的src为一个指向字符串常量的指针,不能对src指向的位置的内容做改变的操作,即不能执行 *src = 'a', *(src+1) = 't' 等操作
但是可以改变src指向的位置,即像之前的 src = "mmmt";
(b) 指向一个字符数组
char tmp[4] = {'a', 'c', 'e', 'f'}; char* src = tmp;
(c) 使用 new,然后可以像字符数组一样赋值,即指向一个字符数组
char* src = new char[10];
这种方式由程序在堆内存上开辟了一个数组,并将地址赋值给src