C的指针疑惑:C和指针6(指针)

本文深入探讨了C语言中指针的基本概念与高级用法,包括指针的初始化、间接访问操作、指针算术运算及字符串处理等内容,并通过实例说明了如何避免常见错误。

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++ != '\0')
        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\n", rec);

}

 

 

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

(1):字符指针

(2):使用字符数组

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

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

 

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

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

转载于:https://www.cnblogs.com/Caden-liu8888/p/6442308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值