c语言指针

//1什么是指针?2指针的数据类型形式?3指针的占几个字节?5他们可以互换吗?
//4整型指针变量和整形普通变量的区别?6指针类型和 指针所指向的类型区别?
//7指针的本质?8指针取的地址?9指针每次位移几个位与和因素有关?10大端存储和小端存储区别?
//1答:指针即指针变量,在c语言中专门存储系统分配的内存地址,我们可以通过这个地址找到
//内存分配的空间,从而进行对变量进行操作。
//2答:数据类型 + * + 变量 例如:int* p ,p为了存放int型变量的地址;char* p1
//p1为了存放char型变量的地址,float* p2存放float类型的地址
//3答:32bit程序占4个字节,64bit程序占是8个字节,向下兼容
//4答:整形指针变量是存储 整形数值的地址,
// 整形变量是存储 整形数值。
//5答:他们不可以互换,我们不能对整形变量中找到的地址进行操作。
//6答:去掉变量可以确定指针的类型,去掉变量和可以确定指针所指向的类型。
//7答:
+变量名
//8答:指针取得地址是首字节的地址
//9答:指针每个单位偏移的大小与指针指向的类型有关,例如int类型在64位程序中偏移4个字节,char类型在64位程序中偏移1个字节,与等号左边的值无关。
//10答:大端存储:一般用于大型网络设备 IBM生产的芯片,如果数据是从小到大的排列,则内存小数存高位,大数存地位,但每位中的顺序不能,见例子999999小端存储:一般用于个人电脑,inter生产的芯片,如果数据是从小到大的排列,则内存存储是按大数村低位,小数存高位,但每位中的顺序不能变,见例子999999

#include<stdio.h>
int main ()
{
int h=10;
int y;
char x;
int *a = &h;
int i= &h;
char *h1=&x;
printf(“指针变量中所存的地址长度用十六进制表示的值 %p\n”,a);
printf(" 普通变量中所存的地址长度用十六进制表示的值%p\n",i);
printf(" 指针变量中所存的地址长度用十进制表示的值%d\n",a);
printf(" 普通变量中所存的地址长度用十进制表示的值%d\n",i);

printf("整形指针的大小 %d\n",sizeof(int *));  //整形指针的大小 8bit
printf("*a所存的数据大小 %d\n",sizeof(*a));   //*a所存的数据大小 4bit
printf("整形变量数据的大小%d\n",sizeof(a));   //整形变量数据的大小 8bit
printf("char型指针的大小 %d\n",sizeof(char *)); //char型指针的大小 8bit
printf("*h1所存的数据大小 %d\n",sizeof(*h1));   //*h1所存的数据大小 1bit
printf("char形指针变量数据的大小 %d\n",sizeof(h1)); //char形指针变量数据的大小 8bit
//将999999存储到整形变z里
int z=1;
char* p=&z;
//999999转换为二进制为0000 0000  0000 1111 0100 0010 0011 11111
                                                          ?高位                              ?低位
//通过指针偏移将每一位的值送入变量对应的每一位里,用win32程序执行为999999999
//注意为什么使用char*  因为chari*可以每次移动1位,int*每次移动4位。
//inter芯片为小端存储,数据高位存在内存低位中。
* (p+3)=0x00;
* (p+2)=0x0f;
* (p+1)=0x42;
* (p+0)=0x3f;
printf("%d\n",p);

return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值