C语言编程之指针

在32bit系统中,指针就4个字节

指针指向内存空间,一定要保证合法性(段错误)


修饰符:const、voliatile


const:

const char *p                   只读(指向地址可变,指向地址的内容只读)

char * const p                  指向固定地址,但指向地址的内容可变(硬件资源关系大)

const char * const p         地址内容均不可变

char *p = "Hello world"      //“”代表常量,强行修改会出现段错误

volatile:防止优化指向内存的地址

   volatile char *p;

    *p =0x10;

     while(*p ==0x10);

        xxx


指针的加减法运算,实际上加的是一个单位,单位大小:sizeof(指针的属性,如char、int等)

int *p =xxx;     //p=0x12  

p++;               //   p==0x12+1*sizeof(int)      

变量名 [n]:        n:ID便签       地址内容的标签访问方式

               p[2] 相当于p+2

#include<stdio.h>
int main(){
	int a = 0x12345678 ;
	int b = 0x77225577 ;
	int *p1 = &b;
	char *p2 = (char *)&b;

	printf("The p1+1 is %x,%x,%x\n", *(p1+1),p1[1],*p1+1);
	printf("the p2+1 is %x\n",p2[1]);
	return 0;
}

运行结果 

ubuntu@ubuntu-virtual-machine:~$ ./pointer
The p1+1 is 12345678,12345678,77225578
the p2+1 is 55

 深度理解程序内存分区中的栈空间和堆空间

注:内存分配自高向低地址,而读内存是自低向高

#include<stdio.h>
int main(){
	const int a = 0x12345678 ;
	int b = 0x77225577 ;
	int *p1 = &b;
	char *p2 = (char *)&b;
	p1[1] = 0x100;
	printf("The p1+1 is %x,%x,%x\n", *(p1+1),p1[1],*p1+1);
	printf("the p2+1 is %x\n",p2[1]);
	return 0;
}
//运行结果

ubuntu@ubuntu-virtual-machine:~$ ./pointer
The p1+1 is 100,100,77225578
the p2+1 is 55

注:const修饰的变量为只读变量,但是仍然可以通过上述方式修改其值。                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值