quiz 3

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

猜你喜欢

转载自www.cnblogs.com/eleni/p/11825473.html