可能导致内存泄露,或野指针
#include <stdio.h> int main(vodi) { int * p; int i = 5; *p = i; //error,无语法错误,*p指的是本程序以外的地址单元,本程序无权更改 printf("%d\n",*p); return 0; }
#include <stdio.h> int main(void) { int i = 5; int * p; int * q; p = &i; *q = p; // error,有语法错误,p是指针,*p是int型变量,二者类型不同 printf("%d\n",*q); return 0; }
#include <stdio.h> int main(void) { int i = 5; int * p; int * q; p = &i; // *q = p; //error 语法编译会出错,p存放i的地址,*p指普通变量,二者不同 // *q = *p; // error 语法无错 printf("%d\n",*q); return 0; }
#include <stdio.h> int main(void) { int i = 5; int * p; int * q; p = &i; // *q = p; //error 语法编译会出错,p存放i的地址,*p指普通变量,二者不同 // *q = *p; // error 语法无错 p = q; // q是垃圾值,q赋给p,p也变为垃圾值 printf("%d\n",*q); /* q的空间是属于本程序的,所以本程序可以读写q的内容, 但是如果q内部是垃圾值,则本程序不能读写*q的内容 因为此时*q所代表的内存单元的控制权限并没有分配给本程序 所有本程序运行到13行时,就会立即出错 */ return 0; }
乘法
定义指针变量
指针运算符
放在定义好的指针变量的前面,*p表示以p的内容为指针的变量
#include <stdio.h> int f(int i,int j) { return 100; return 88; //88无法返回 } int main(void) { int a = 3,b = 5; a = f(a,b); b = f(a,b); //调用2次才可以修改b的值 }
#include <stido.h> void g(int *p,int *q) { *p = 1; *q = 2; } int main(void) { int a = 3,b = 5; g(&a,&b); print("%d %d\n",a,b); return 0; }