Head First C - 存储器和指针

Head First C - 存储器和指针

指针

指针就是存储器中某条数据的地址。指针的两件事:避免副本和共享数据。在C语言中使用指针有以下几个原因:

  1. 函数调用时,可以只传递一个指针,而不用传递整份数据
  2. 让代码直接对数据进行操作,而不是处理副本

存储器

每当声明一个变量,计算机都会在存储器中某个地方为它创建空间。

int y = 1;
int main(){
   
    int x = 4;
    return 0;
}

以上,y是全局变量,计算机把y保存在存储器的全局量段内(Globals)。x是在main()函数内部声明的,计算机会把x保存在存储器区段中的栈中。


  • 保存局部变量的部分。


  • 用于动态存储:程序运行时创建一些数据,然后使用很长一段时间。

  • 全局量
    位于所有函数之外,并对所有函数可见。

  • 常量段
    保存在只读存储器中,保存不变量。

  • 代码段
    放在存储器地址的低位,代码段是只读的,它是存储器中用来加载机器代码的部分。

计算机可能将栈中4100 000号存储单元分配给x,把‘4’这个值保存在 4100 000号单元里。

想要找到变量的存储器地址,通过 & 运算符(取址):

printf("x保存在 %p\n", &x);

变量地址告诉去哪里照存储器中的变量,因为地址指向了存储器中的变量,地址也有时候叫指针。

C语言的值传递

  1. main()有一个longitude的局部变量,值为32
  2. 调用go_south_east()函数时,将变量longitude值复制给了lon,其中进行的是值的传递。
  3. go_south_east()函数修改了lon,这个值是longitude的副本,但是没有修改longitude。

传递指针变量

把变量longitude的地址传递给go_south_east(),不仅能知道longitude的值的地址,也能知道其中的内容。此时修改白能量的值,就是真正修改了。

指针让存储器易于共享,一个函数可以修改另一个函数创建的数据,只要知道地址。

使用存储器指针

  1. 得到变量的地址
   int x = 4;
   printf("x lives at %p\n", &x);
   int *address_of_x = &x;
  1. 读取地址中的内容
   int value_stored = *address_of_x;

*运算符和&运算符作用相反,&接收一个数据,告诉地址;*接收一个地址,告诉地址中保存的数据。指针有时候被叫引用,*运算符有时也叫对指针进行解引用。

  1. 改变地址中的内容
	*address_of_x = 99;

把字符串传给函数

字符串实际上就就是字符数组,传参数时,把字符串的地址传送即可。

void fortune_cookie(char msg[]){
   
	printf("Message reads: %s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值