1、首先搞清楚变量与内存的关系:(内存地址就是内存的编号)
(1)内存用于存储数据,最小单元是字节(8bit),每个单元都有一个唯一的编号(即地址:0x00000000~0xFFFFFFFF))。
(2)变量与大小(sizeof操作符,int大小是4字节),变量的大小指的是它在内存中占了几个字节。
(3)变量有地址,变量的地址就是该变量在内存中的位置。可用&号取得地址。
(4)变量的赋值,就是向内存写入数据,读变量的值,就是从内存中读取数据。
(5)每个变量都有自己的内存地址,绝不会有2个变量的内存地址相同。
(6)程序每次运行时,变量的地址是不一样的,无法预测也不需要预测其地址。
#include <stdio.h>
int main()
{
int a = 0x12345678;
printf("size=%d\n",sizeof(a));
printf("Address=%08x\n",&a);
a=0x04040404;
return 0;
}2、如何表示内存地址呢?
地址是整数,是不是可以用int?
但是为了强调他时一个内存地址,提出一些新的类型。
char*:表示一个char型变量的地址。int * :表示一个int型变量的地址。......
int a = 10;
//定义一个指针变量pa,类型为int,初始值为&a.
int* pa = &a ;关于指针:
1、指针也是变量,是可以变得。
#include <stdio.h>
int main()
{
int a=10;
int b=11;
int* p=&a;//p指向a
p=&b;//p指向b
return 0;
}可以把指针当成一种整型变量。
2、不同类型的指针不能相互赋值的。
3、指针即地址,地址是整数,所以指针是一个整数类型。
3、星号操作:按地址访问
1、使用指针,按地址访问,直接修改内存
*p操作:用于访问p指向的内存进行读写操作。
#include <stdio.h>
int main()
{
int a=1234;
int* p=&a;//p指向a所在的内存
*p=*p+2;
int b=*p;//取得p指向的内存值
int c=*p+3;
return 0;
}只有指针变量才能用*号操作,其他变量可不行。
版权声明:本文为weixin_41211961原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。