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