变量存储示意图
指针间接改变变量的值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main0101()
{
int a = 0Xaabbccdd;
//a = 100;
printf("%p", &a);
getchar();
return 0;
}
int main0102()
{
//定义指针变量存储变量地址
//指针类型 ----------》数据类型*
int a = 10;
int* p = &a;
//a = 100;
*p = 100;//通过指针间接改变变量的值
printf("%d\n", a);
printf("%d\n", *p);
printf("%p\n", &a);
printf("%p\n", p);
return 0;
}
int main0103()
{
//定义指针变量存储变量地址
//指针类型 ----------》数据类型*
char a = 'n';
char* p = &a;
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(char*));
int b = 10;
int* p1 = &b;
printf("%d\n", sizeof(p1));
//& 是 取地址符号,升维度
//*是 取值符号,降维度
//指针在内存中占字节大小
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(double*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(long long*));
return 0;
}
int main0104()
{
char a = 'a';
int* p = &a; //定义指针类型 一定要和变量类型对应上
//*p = 123456;
printf("%d\n", a);
printf("%d\n", *p);
printf("%p\n", &a);
printf("%p\n", p);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main0105()
{
//不建议将一个变量的值赋值给一个野指针
//野指针 是指针变量指向一个未知的空间
int* p = 100;//程序中允许存在野指针
printf("%d\n", *p);//操作野指针对应的内存空间可能会报错 操作系统将0-255作为系统占用,不允许读写操作
return 0;
}
int main0101()
{
//空指针 内存地址编号为0的空间
int* p = NULL;
printf("%d\n", *p);//操作空指针对应的内存空间一定会报错
//空指针可以用作条件判断
/*if (p == NULL)
{
}*/
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
int a = 10;
//int* p = &a;
//万能指针可以接收任意类型变量的内存地址
void* p = &a;
//在通过万能指针修改变量的值时,需要找到变量对应的指针类型
*(int*)p = &a;
printf("%d\n", *(int*)p);
printf("%d\n", a);
//*p = 100;
printf("万能指针在内存中占用字节大小:%d\n", sizeof(void*));
//printf("void万能指针在内存中占用字节大小:%d\n", sizeof(void));//error
//printf("%d\n", *p);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main0401()
{
//常量
const int a = 10;
//a = 100; //error
//指针间接修改常量的值
int* p = &a;
*p = 100;
printf("%d\n", a);
return 0;
}
int main0402()
{
int a = 10;
int b = 20;
const int* p = &a;
p = &b;//ok
//*p = 100;//error
printf("%d\n", *p);
return 0;
}
int main0403()
{
int a = 10;
int b = 20;
//const修饰指针变量时,可以修改指针指向内存空间的值,不可以修改指针变量的值
int* const p = &a;
//p = &b;//error
*p = 100;//ok
printf("%d\n", *p);//ok
return 0;
}
//const 离谁近 就不能个改变谁
//const 离谁近 就不能个改变谁
//const 离谁近 就不能个改变谁
//const 离谁近 就不能个改变谁
//const 离谁近 就不能个改变谁
//const 离谁近 就不能个改变谁
int main()
{
int a = 10;
int b = 20;
//const修饰指针类型, 且修饰指针变量时 即为只读指针 (不可以直接修改指针指向内存空间的值,也不可以直接修改指针变量的值)但二级指针可以修改
const int* const p = &a;
//p = &b;//error
//*p = 100;//error
//二级指针操作
int** pp = &p;//二级指针 *pp是一级指针的内容 **pp是变量的值
//*pp = &b;//ok
printf("%d\n", *p);//20
**pp = 100;//ok
printf("%d\n", *p);//100
return 0;
}