内存和地址
1.计算机中内存单元的编号地址指针
2.在计算机中为了方便管理内存,内存被划分为以字节为单位的内存空间,相当于一个内存单元为一个字节。
3.为了方便找到这个内存单元,每个内存单元都有一个编号。
4.变量创建的本质:在内存上开辟空间
#include<stdio.h>
int main(){
int i=4;//要向内存申请4个字节的空间,来存放数据4
int * p=&i;//P叫指针变量,存放指针的变量
*p=0;//*是解引用操作符/间接访问操作符
//*p就是通过P中存放的地址,找到地址指向的空间,*p就是a;
return 0;
}
*说明P是指针变量;
P的类型是int *;
P指向的对象是int 类型的;
指针类型变量的意义
1.指针类型是有意义的;
2.指针类型决定了指针在解引用操作时的权限,也就是一次解引用访问几个字节;e.g.char类型指针访问1个字节,int类型指针解引用访问四个字节;
coust修饰指针
#include<stdio.h>
int main(){
const int n=100;
//n=20//err因为coust修饰变量,使得这个变量值不能被修改
int * p=&n;
*p=20;
printf("%d\n",n);
return 0;
}
coust修饰指针
1.coust 放在的左边。
限制的是指针指向的内容,意思是不能通过指针来修改指向的内容,但指针变量本身可以修改;
2.coust 放在的右边。
限制的是指针变量本身,意思是不能修改指针变量的指向,但是可以修改指针指向的内容;
#include<stdio.h>
int main(){
int m=100,n=10;
coust int * p=&n;//或者coust 在int后边,强调在*左边即可
*p=0;//报错,不可以改变p指向的值
p=&m;//但可以改变p变量本身的值
printf("%d\n",n);
return 0;
}
#include<stdio.h>
int main(){
int m=100,n=10;
int * coust p=&n;
p=&m;//报错,不可以改变p变量本身的值
*p=0;//但可以改变p指向的值
printf("%d\n",n);
return 0;
}
指针运算
指针±整数的俩种算法
#include<stdio.h>
int main(){
int arr[]={1,2,3,4,5,6,7,8,9,10};
int *p=&arr[0];
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
printf("%d",*(p+1));
}//p+i--->&arr[i]
return 0;
}
#include<stdio.h>
int main(){
int arr[]={1,2,3,4,5,6,7,8,9,19};
int *p=&arr[0];
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
printf("%d",*p);
p++;//p=p+1
}
return 0;
}