马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Julia999 于 2019-7-31 20:40 编辑
#include<stdio.h>
int main()
{
int *p; //p是个变量名字,int *表示该p变量只能存储int类型变量的地址
int i=10;
int j;
//j=*p; //错误 野指针
return 0;
}
指针的定义:
地址:内存单元的编号(从0开始的非负整数)
范围:0----FFFFFFFF【0-4G-1】
指针:指针就是地址,地址就是指针
指针变量就是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数
分类:
1.基本类型的指针
2.指针和数组的关系
基本概念:int i=10;
int *p=&i; //等价于int *p; p=&i;
详解这两部操作:
1)p存放了i的地址,所以我们说p指向了i
2)p和i是完全不同的两个变量,修改其中的任意一个变量不改变另外一个
3)p指向i,*p就是i变量本身。更加形象的说就是所有出现*p的地方都可以换成i
注意:
指针变量也是变量,只不过他存放的不能是内存单元的内容,只能存放内存单元的地址
普通变量前面不能加*
常量和表达式前不能加&
区分:#include<stdio.h>
void f(int i)
{
i=100;
}
int main()
{
int i=9;
f(i);
printf("%d:",i);
return 0;
}
上面这个是不能改变i的值的,最后的输出结果仍然是9。因为本质上,这样的操作并不能对i进行修改。#include<stdio.h>
void f(int *i) //不是定义了一个名字叫做*i的形参,而是定义了一个形参,该形参的名字叫做i,他的类型是int *
{
*i=100;
}
int main()
{
int i=9;
f(&i);
printf("%d:",i);
return 0;
}
如何通过被调函数修改主调函数中的普通变量的值
1.实参为相关变量的地址
2.形参为以该变量的类型为类型的指针变量
3.在被调函数中通过 *形参变量名 的方式就可以修改主函数中的变量
指针和数组:
指针和一维数组:
数组名
一维数组名是个指针常量
他存放的是一维数组第一个元素的地址
他的值不能被改变
一维数组名指向的是数组的第一个元素
下标和指针的关系:
a<-->&=*(a+1)#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
//a[3]=*(a+3);
print("%p\n",a+1);
print("%p\n",a+2);
print("%d\n",*a+3); //*a+3等价于a[0]+3 =4
return 0;
}
#include<stdio.h>
void Show_Array(int *p,int len)
{
//p[2]=-1;
//p[i]就是主函数a[i]
for(int i=0;i<len;i++)
{
printf("%d\n",p[i]);
}
}
int main()
{
int a[5]={1,2,3,4,5};
Show_Array(a,5); //a等价于&a[0],&a[0]本身就是int *类型
return 0;
}
如果通过被调函数修改主调函数中一维数组的内容【如何界定形参中的两个参数】存放数组首元素的指针变量
存放数组长度的整型变量#include<stdio.h>
int main()
{
double *p;
double x=66.6;
p=&x; //x占8个字节,1个字节是8位,1个字节一个地址
double arr[3]={1.1,2.2,3.3};
double *q;
q=&arr[0];
printf("%p\n",q); //%p实际就是十六进制输出
q=&arr[1];
printf("%p\n",q);
return 0;
}
|