zoukankan      html  css  js  c++  java
  • C的指针疑惑:C和指针6(指针)

    NULL:

    对所有指针变量进行显式的初始化是种好事:(1)如果你知道指针将被初始化为什么地址,就直接初始化该地址,

    (2)否则把它初始化位NULL.

    注意:假定变量a存储于位置100.

    ×100 =25

    看上去像是把25赋值给a,因为a是位置100所存储的变量。但这是错误的,这条语句是非法的。因为字面值100的类型是整形,而间接访问操作只能作用于指针类型表达式。

    正确:

    ×(int ×)100 =25

    强制类型转换把值100从“整形”转换为“指向整形的指针”

    这种技巧运行之处:你偶尔需要通过地址访问内存中某个特定的位置。

    前缀++:先增加它的操作数的值再返回这个结果。

    后缀++:先返回cp值的一份copy,然后再增加cp的值。

    易错点:

    char ch = 'a'
    char *cp = &ch;
    此时的×cp++代表什么????

    结果是:它的右值和左值分别是变量ch的值和ch的内存位置,也就是cp原先所指。

    定人误解的地方:后缀++操作符的优先级高于*操作符。但表达式结果看上去是像先执行间接访问操作。

    实际:这里有三个步骤

    (1)++操作符产生cp的一份拷贝

    (2)然后++操作符增加cp的值

    (3)最后在cp的拷贝上执行间接访问操作。

    *cp++:这个表达式常常在循环中出现,首先用一个数组的地址初始化指针,然后使用这种表达式就可以依次访问该数组的内容了。

    #include <stdio.h>
    #include <stdlib.h>
    size_t strlen_test(char *string)
    {
        int length = 0;
    
        while(*string++ != '')
            length += 1;
        return length;
    }
    
    int main(void)
    {    
        int rec= 0;
        char *m_string = "I am liuxj";
        rec = strlen_test(m_string);
    
        printf("rec is %d
    ", rec);
    
    }

    C语言中存储一个字符串:

    (1):字符指针

    (2):使用字符数组

    const char *str = "hello";
    const char str[] = "hello";

    两个指针相减前提:两个指针指向同一个数组中的元素)的结果:是两个指针在内存中的距离(以数组元素的长度位单位,而不是以字节位单位),因为减法运算的结果将除以数组元素类型的长度。

    两个指针的关系运算: <, <=, >, >=

    比较将会告诉你,哪个指针指向数组中更前或更后的元素。

  • 相关阅读:
    js汉字转换为阿拉伯数字支持十到十九
    JS中判断是中文数字的函数
    一个JS正则的字符串替换函数
    thinkphp3.2.3使用formdata的多文件上传
    计算列表中的名字出现的订单中的订单总额
    配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
    IIS8.5中的强制https直接修改web.config文件和顶级域名跳转www和过滤子目录不强制跳转
    关于wordpress4.8中的Twenty Seventeen主题的主题选项增加章节的实现
    excel中统计COUNTIFS的值为0
    thinkphp3.2.3集成phpexcel1.8导出设置单元格合并
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/6442308.html
Copyright © 2011-2022 走看看