C语言学习--指针--指针和内存单元
指针和内存单元
指针: 地址
内存单元: 计算机中内存最小的存储单元。
指针的定义和使用
int a = 10;
int *p = &a; *表示指针变量
*p = 250; 指针的解引用,间接引用
*p: 表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间
如果做左值: 存数据到空间
如果做右值:取出空间的内容
#include<stdio.h> int main (void) { int a = 10; // 定义变量a , 并赋值为10 int *p = &a; // 定义一个指针变量, 并把a 变量的地址复制给指针变量p *p = 29000; // 表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间, 在把2900 写到这个内存空间 printf("a 变量的值为 %d", a); }
a 变量的值为 29000
#include<stdio.h> int main (void) { int a = 10; // 定义变量a , 并赋值为10 int *p = &a; // 定义一个指针变量, 并把a 变量的地址复制给指针变量p //*p = 29000; a = 350; printf("*p 变量的值为 %d", *p); // 表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间, 在取出这个内存空间里面的值 350
}
*p 变量的值为 350
#include<stdio.h> int main() { int a = 10; int * p; p = &a;//定义指针变量之后要马上复制, 避免出现野指针(没有指向的指针变量) printf("the a is %d",*p); return 0; }
#include<stdio.h> void func(int *x, int *y){ *x = 10;//*: 指向变量x所代表的地址, 然后把10 写到这个内存地址里面。 *y = 20; } int main() { int a = 100; int b = 200; int *p1 = &a; int *p2 = &b; func(p1,p2);//将a,b变量的地址传进去, 通过直接操作地址, 来改变变量a,b的值 printf("a : %d, b :%d", a,b);//10, 20 return 0; }
#include<stdio.h> int main() { int arr[] = {1,2,3}; int *p1 = arr; // int *p1 = &arr[0] p1+=2;//表示指针的偏移, 偏移两个4字节 printf("%d",*p1);//3 return 0; }
#include<stdio.h> #include<string.h> int main() { char *p1 = "hello world";//p1代表的是第一个字符的地址 printf("sizeof *p1 %d \n ",sizeof(p1));//char 类型指针的大小 printf("strlen is %d\n",strlen(p1));//打印有效字符的个数 p1+=4;//p1 上面初始话的时候代表的是第一个字符的地址, 在偏移4个4字节, 就到o了 printf("*p1 is %c",*p1);//o return 0; }
#include<stdio.h> #include<string.h> int main() { float a = 2.22; float *p2 = &a; printf("%d, %d \n",sizeof(a),sizeof(p2));//4,8 printf("%x\n",p2);//2eb08d28 printf("%f\n", *p2);//2.22 return 0; }