一、指针的概念
二、*号的含义
三、指针指向数组
四、指针指向的指针
一、指针的概念:pointer,指向一块地方(即内存地址)的东西。(也就是存放这些东西的空间)。
运行时的数据是存在内存里面的,每一条数据都有一个地址。
指针相当于内存地址;指针:是一种类型;指针变量:指向一块内存地址的变量
二、*号的含义:
1、定义指针变量的时候,*表示这是一个指针类型
int *a; int * 是一个常整数指针类型
2、当取值的时候,取这个内存地址里面的值的一个符号
& 取地址符 可以通过&取一个变量的内存地址;
%p 来打印内存地址
int a = 10;
//找到a的内存地址
printf("%d\n",*p);
// int score = 90;
// int score2 = 100;
// int*scorep=&score;
// int*score2p=&score2;
// printf("%d\n",*scorep+*score2p);
// &a表示a的内存地址
//p:是一个指针变量,也是一个内存地址
//把a的内存地址赋值给p,p和&a就是同一块地方
//变量就是一个名字,p就是这块内存地址的一个名字(代号)
//p -> &a p里面就是a的内存地址
int* p = &a;
printf("%p\n",&a);
//*p表示取p这个内存地址里面的值
//*现在表示是一个取值的符号
//把p里面的值找出来
printf("%d\n",*p);
三、指针指向数组名,是指向的数组里面的第一个元素的内存地址
//char *指针指向一块内存地址,里面存的是一系列的字符+\0
//char*[]:数组
四、指针指向的指针
int** //指向指针的内存地址
用**表示指向指针的的变量
int a = 10;
int *p = &a;//p的指针地址 指向a的地址
int **p1 = &p;//p1的指针地址 指向p的地址
printf("%d \n",**p1);//取出*p1指针地址里面的值
int a ;//常整数类型的变量a 可以使用a 代替所有的常整数
int *aaa;//内存地址类型的变量 aaa 可以使用aaa代替所有的内存地址
//void sum(int *a,int *b){
// printf("%d\n",*a+*b);
//
//}
//void change(int*a,int*b){
// *a=40;
// *b=10;
//}
int main(int argc, const char * argv[]) {
// int a=10;
// 找到a的地址
// printf("%p\n",&a);
// &a a的内存地址
// p 是一个内存变量,也是一个内存地址
// 把a的内存地址赋值给p,p和&a就是一块地方
// 变量就是一个名字,p就是这块内存地址的一个名字(代号)
// int *p=&a;
// *p表示取p这个内存地址里面的值
// *现在表示是一个取值的符号
// 把p里面的值找出来
// printf("%p\n",p);
// int score=90; int score2=100;
// &score &score2
// 通过指针变量计算总分
// int score=90;
// int score2=100;
// int *scorep=&score;
// int *scorep2=&score2;
// printf("%d\n",*scorep+*scorep2);
//
// sum(&score,&score2);
// change(&score, &score2);
// printf("%d%d\n",score,score2);
int list[3]={33,22,11};
int *p=&list[0];
p++;
printf("%p\n",&list[1]);
int a1=*p;
printf("%d\n",*p);
printf("%d\n",a1);
printf("%p\n",&*p);
printf("%p\n",&a1);
int aaa=10;
int *aplace=&aaa;
printf("%d\n",*aplace);
// pplace->aplace->aaa
int **pplace=&aplace;
printf("%p\n",*pplace);
printf("%d\n",**pplace);
网友评论