//二维数组的理解 #include<stdio.h> void main() { int a[3][3] = {1,2,3,4,5,6,7,8,9}; int *n[3]; //这两种声明的方式是一样 int *(n[3]); //指针数组 int (*p)[3] = a; //数组指针,指向数组的指针 int *m =&a[0][0]; printf("%x\n",m); printf("%x\n",*(p+1)); printf("%d\n",**(p+1)); printf("%x\n",*a); printf("%x\n", a); for(int i=0;i<9;i++) printf("%x\n",*(a+i)); for(int i=0;i<9;i++) printf("%d\n", *(*a+i)); for(int i=0;i<9;i++) printf("%d\n",**(a+i)); } //指针参数也就是一个地址而已 #include<stdio.h> void print(int *q) { printf("%x\n",q); q= q+3; printf("%x\n", *q); } void main() { int b[9] = { 1,2,3,4,5,6,7,8}; int *p = b; printf("%x\n",p); print(p); printf("%x\n",*p++); } 对指针引用的理解 #include<stdio.h> #include <stdlib.h> #include <string.h> void Malloc(char *&p) { printf("%x\n",p); p = (char*)malloc(100); printf("%x\n",p); } void main() { char *str = NULL; str = (char*)malloc(100); strcpy(str,"hello"); printf(str); strcpy(str,"world\n"); printf(str); printf("%x\n",str); free(str); str = NULL; printf("%x\n",str); Malloc(str); strcpy(str,"hello"); printf(str); }