作用域:有效范围 生命周期
全局变量:在整个文件范围内都可以使用
局部变量:在指定范围可以使用
指针:Pointer
指针的概念:是指向一块地方的类型
地方:就是内存地址
运行时的数据都是存在内存里面的每一条数据都有一个地址这个地址就叫内存地址
指针就相当于内存地址
指针是一种类型
指针变量:指向一块内存地址的变量
*号的含义:定义指针变量的时候“*”表示这是一个指针类型
int *a;int *是一个常整数指针类型
当取值的时候 “*”表示取这个内存地址里面值的符号
&:取地址符 可以通过这个符号取到一个变量的内存地址
打印内存地址用“%p”
指针与数组:
指针:指向一块内存地址
数组:是固定的一块内存地址
char *指针 指向一块内存地址里面存的是一系列的字符加上\0结束的
char xx[];数组
指针指向的是数组的内存地址 其实它指向的是内存里面数组第一个元素的内存地址
*/
#include <stdio.h>
/*void sum(int *a ,int *b){
printf("%d\n",*a+*b);
}*/
/*void change(int *a,int *b){
*a=40;
*b=10;
}*/
void exchange(int *a ,int *b){
int c=*a;
*a=*b;
*b=c;
printf("%d\n%d\n",*a,*b);
}
int main(int argc, const char * argv[]) {
int a=10;
//&a表示a的内存地址 p是一个指针变量也是一个内存地址
//把a的内存地址赋值给p p和&a就是同一块地方
//变量就是一个名字 p就是这块内存地址的一个名字(代号)
//p->&a
int *p=&a;
printf("%p\n",p);
//*p表示取p这个地址里面的值 *现在表示一个取值的符号 把p里面的值给找出来
printf("%d\n",*p);
//int score=90;int score2=100;
//&score &score2通过指针变量计算总分
/*int score=90;
int score2=100;
int *scorea = &score;
int *score2b=&score2;
printf("%d\n",*scorea+*score2b);*/
//int score=90;int score2=100;
//&score &score2把他俩的内存地址 传到一个函数计算总分
/* int score=90;
int score2=100;
int *scorea = &score;
int *score2b=&score2;
sum(score2b, scorea);*/
//在函数里面修改成绩
/* int score=90;
int score2=100;
change(&score, &score2);
printf("%d\n%d\n",score,score2);*/
//通过指针来取数组里面的元素
/*int list[3]={33,22,11};
int *l=&list[0];
l++;
printf("%d\n",*l);*/
int list[3]={33,22,11};
int *l=&list[0];
//数组里面元素位置是有序排列的
for (int i=0; i<3; i++) {
printf("%d\n",*l);
l++;
}
/*int s=100;
int b=65;
int *x=&s;
int *y=&b;
exchange(x, y);*/
int aaaa=10;
//aplace指向aaaa的内存地址
int *aplace=&aaaa;
printf("%d\n",*aplace);
// **表示指向指针的内存地址
//指向指针的变量 用**
int **applace=&aplace;
printf("%d\n",*aplace);
printf("%d\n",**applace);
}
return 0;
}