标签:com false java 不同的 mil ret image 乘法 整数
1. 指针的重要性:
总结:指针是c语言的灵魂
2. 指针的定义
(1)地址
内存单元的编号
从零开始的非负整数
范围:4G(0-4G-1)
控制线:控制数据传输的方向
数据线:进行数据传输
地址线:用来确定对内存条的哪个单元进行控制(有32个地址总线,一个地址线能控制2个内存单元,32个地址线能控制2^32个内存单元)
(2)指针
(3)指针的分类
1. 基本类型指针
int * p;//p是变量的名字,(int *)表示p变量存放的是int类型变量的地址 //int * p;不表示定义了一个名字叫做*p的变量 // 所谓int * 类型实际就是存放int变量地址的类型 int i = 3; p = &i; // p保存了i的地址,因此p指向i *p= i ; //*p就是i
指针常见错误 常见错误一: #include <stdio.h> #include <stdlib.h> int main() { int * p; //p是局部变量,若不初始化,则为垃圾值 int i = 5; *p = i;//错误,p应该先指向一个地址,p变量里面是一个垃圾值,不知道*p里面的内容,但是把i=5修改了一个不属于你的单元 printf("%d\n", *p); return 0; } 常见错误二: #include <stdio.h> #include <stdlib.h> int main() { int i = 5; int * p; int * q; p = &i; //*q = p; //错误,int 不能向int * 转换 //*q = *p; //error,因为q没有赋值,q是一个垃圾值,*q是一个不属于你能控制的单元 p = q; //q是垃圾值,q赋给p,p也变成垃圾值 printf("%d\n",*q); /* q的空间是属于本程序的,所以本程序可以读写q的内容 但是如果q内部是垃圾值,则本程序不能读写*q的内容 因为*q所代表的内存单元的控制权限并没有分配给本程序 所以本程序运行到14行就会立即出错 */ return 0; }
互换两个数字 #include <stdio.h> #include <stdlib.h> void exchange_1(int ,int ); void exchange_2(int * ,int *); void exchange_3(int * ,int *); int main() { int a = 3; int b = 5; exchange_3(&a,&b); //exchange_2(*p,*q); 是错误的,exchange_2(a,b);是错误的 printf("a = %d, b = %d\n",a,b); } //不能完成互换功能 void exchange(int a, int b) { int t; t = a; a = b; b = t; return ; } // 不能完成互换功能 void exchange_2(int * p,int * q) { int * t; //如果要互换p和q的值,则t必须是 int *类型,不能是int类型,否则会出错 t = p; p = q; q = t; } //可以完成互换的功能 void exchange_3(int * p,int * q) { int t; //如果要互换*p和*q的值,则t必须定义成int,不能定义int *,否则会出错 t = *p; //p是 int *, *p 是int(*p代表以p地址为整型的变量) *p = *q; *q = t; }
附注:
*的含义
1. 乘法
2. 定义指针变量
int * p; //定义了一个名叫p的变量, int *表示p只能存放int变量的地址
3. 指针运算符
该运算符放在已经定义好的指针变量的前面
如果p是已经定义好的指针变量,则 *p表示 以p的内容为地址的变量
例:int * p; //定义一个p的指针变量
*p = 5;
标签:com false java 不同的 mil ret image 乘法 整数
原文地址:https://www.cnblogs.com/spore/p/11030164.html