zoukankan      html  css  js  c++  java
  • 指针知识(二):指针初始化

    当声明一个指针的时候我们可能需要同时指定它们指向哪个变量,如:

    int number;
    int *tommy = &number;

    这相当于:

    int number;
    int *tommy;
    tommy = &number;

    当给一个指针赋值的时候,我们总是赋给它一个地址值,而不是它所指向数据的值。你必须考虑到在声明一个指针的时候,

    星号 (*) 只是用来指明它是指针,而从不表示间接引用操作符dereference operator (*)。

    记住,它们是两种不同操作,虽然它们写成同样的符号。因此,我们要注意不要将以上的代码与下面的代码混淆:

    int number;
    int *tommy;
    *tommy = &number;

    上面这一种是错的。

    在定义数组指针的时候,编译器允许我们在声明变量指针的同时对数组进行初始化,初始化的内容需要是常量,例如:

    char * terry = "hello";

    这个例子中,内存中预留了存储"hello" 的空间,并且terry被赋予了指向这个内存块的第一个字符(对应’h’)的指针。

    假设"hello"存储在地址1702,下图显示了上面的定义在内存中状态:

    这里需要强调,terry 存储的是数值1702 ,而不是'h' 或 "hello",虽然1702 指向这些字符。

    指针terry 指向一个字符串,可以被当作数组一样使用(数组只是一个常量指针)。例如,如果我们的心情变了,而想把terry指向的内容中的字符'o' 变为符号'!' ,我们可以用以下两种方式的任何一种来实现:

    terry[4] = '!';
    *(terry+4) = '!';

    记住写 terry[4] 与*(terry+4)是一样的,虽然第一种表达方式更常用一些。以上两个表达式都会实现以下改变:

  • 相关阅读:
    fish shell version
    golang io.ReadFull
    Unity5 2D Animation
    unity3d vscode
    golang bufio.Scanner
    kafka知识点
    linux clone
    Oracle查询在哪些 存储过程/函数/触发器 等等中包含 指定字符串
    在Oracle中,使用简洁的函数(Function)实现字符串split分割效果
    在Spring中,使用ProxyFactory实现对Cglib代理对象的再次代理
  • 原文地址:https://www.cnblogs.com/guozqzzu/p/3592643.html
Copyright © 2011-2022 走看看