指针:是一个能存地址的数据类型
定义:类型 * 指针名
赋值: 指针变量名=指针(地址)注意:指针获取方法(&变量名)
何时用:当需要存储地址,便于操作该地址及地址对应的内存数据的时候.
特点:
指针本身也是地址,指针定义之后,自身地址不变,但里面的存的地址可以变化.
&p表示指针自身地址,而p表示指针存的地址.*p表示指针所存地址的内存空间.
int *p2; int *p3[3]; 这里的*p3[3]是什么意思?
答: 所表示的是一个由三个指向int型变量的指针变量所组成的数组,数组里面的每一个元素存储的都是指针
1.指针里存的实际是什么?
答:地址
2. 指针本身有地址吗?
答: 指针变量也是变量,变量就有地址.
3. 指针占几个字节?
答: 由操作系统决定,如是32位,占字节数为4,64位占8个字节.
4. 如何取指针里的数据?
答: *p
5.一个类型的指针可以存不同类型的地址吗?
答:不可以
编程题: 实现一个函数能够实现两个整数的加减乘除运算
#include <stdio.h>
int add(int a,int b,int *p4,int *p5,int *p6);
int main(){
// 定义变量
int a=6;
int b=8;
int c4,c5,c6;
int *p4=&c4;
int *p5=&c5;
int *p6=&c6;
int c3=add(a,b,p4,p5,p6);
printf ("a+b=%d,a-b=%d,a*b=%d,a/b=%d\n",c3,c4,c5,c6);
}
int add(int a,int b,int *p4,int *p5,int *p6){
// 函数调用
*p4=a-b;
*p5=a*b;
*p6=a/b;
return a+b;
}
int a=100 ,b=200;
int *p=&a;
int *q=&b;
printf("a=%d,*p=%d\n",a,*p);
printf("b=%d,*q=%d\n",b,*q);
// 不可利用*p间接改变a变量值 *p=b ;这里是错的
p=&b; // 但可以将p指针指向另一变量的地址
printf("*p=%d\n",*p);
// q=&a; 不可更改q指针指向另一变量的地址
*q=888; // 可以利用q指针间接更改b的变量值.
printf("*q=%d\n",*q);
int a=100;
int *p1=&a;
int **p2=&p1; //
printf("变量定义如下:\n");
printf("int a=100:\n,int *p1=&a:\n,**p2=&p1:\n\n");
printf("&a=%p\n",&a); // 0x7fff5bd5ac08
printf("&p1=%p,p1=%p\n",&p1,p1); //0x7fff5bd5ac00 ,p1=0x7f5ac08
printf("&p2=%p,p2=%p\n\n",&p2,p2);//
0x7ff5bd5abf8,p2=0x7fff5bd5ac00
printf("**p2=%d,*p1=%d\n",**p2,*p1); // 100, 100
|
|