目标:分配一段内存,内存用于存储指针。
代码:
#include <stdio.h> #include <stdlib.h> void test(char **p, char *str, char *str2) { printf("p:%p ", p); /* p指向malloc分配的内存起始地址 x */ printf("&p:%p ", &p); /* &p为入参p自己本身的地址 x2 */ printf("*p:%p ", *p); /* *p此时为NULL */ *p = str; printf("*p:%p ", *p); /* *p此时为str的地址 */ p++; /* 向后偏移一个指针类型大小到 x + 4 */ printf("p:%p ", p); printf("&p:%p ", &p); *p = str2; printf("*p+1:%p ", *p); /* *p此时为str2的地址 */ } int main() { char *str = "abc"; char *str2 = "abcdef"; printf("str:%p ", str); printf("str2:%p ", str2); char **p = malloc(8*sizeof(char *)); printf("p:%p ", p); /* p指向malloc分配的内存起始地址 x */ printf("&p:%p ", &p); /* &p为指针变量p自己本身的地址 x1 */ printf("*p:%p ", *p); /* *p此时为NULL */ test(p, str, str2); printf("p:%p ", p); printf("&p:%p ", &p); printf("*p:%p ", *p); /* 此时为str的地址 */ printf("p:%p ", *(p+1)); /* 此时为str2的地址 */
printf("p:%p ", p[1]); /* 此时为str2的地址,同*(p+1) */