字符指针的进阶

简介: 字符指针的进阶

对于指针,到此处的读者对于都有着不少的独自认识与了解!因此,笔者也不敢托大!作为一个浅浅的小白,写篇指针的进阶,来祈祷大佬的指教!


首先,笔者先对指针进行初步回顾一下!


1.指针就是变量,用来存放地址,地址唯一标识的一块内存空间!


2.指针的大小是固定的4/8个字节(32位平台/64位平台)!


3.指针是有类型,指针的类型决定了指针走一步(+,-)整数的步长!指针解引用操作的时候的权限!


4.指针的运算!


下面步入正题:


1.字符指针:char * 类型


char ch = 'W';

char* pc = &ch;

这段是我们所熟悉的!但是对于再字符串指针中:


#include <stdio.h>
int main()
{
  char* ps = "abcdef";
  printf("%c\n", *ps);
    return 0;
}

而最后的打印结果为:a


对于打印结果,不少人有着疑惑,但结果确实是这样的!


0a2653c851af460fa595bd959398a8f1.png


在这里面  char* ps = "abcdef",仅仅是将 字符串的首地址(a的地址)传递给了指针ps;


并不是将abcdef存放到ps里面,而是存放的a的地址!因此再printf("");语句里面,对其解引用,得到的结果为a ;


2.在上述代码中:    char* ps = "abcdef";  为字符串常量,


下面笔者对上述代码段进行简单更改!


#include <stdio.h>
int main()
{
  char* ps = "abcdef";
  ps = 'w';
  printf("%c\n", *ps);
  return 0;
}

然而最后的打印结果为:什么都不打印!!!


6de278e6d6694ce5bb08e7e842b7e74b.png


是滴!我没有说错,你也没有看错!最后的打印结果确实为:什么都没有!!!


主要原因为:字符串常量不可修改!


#include <stdio.h>
int main()
{
  char* ps = "abcdef";
  printf("%s\n", ps);
  return 0;
}

对于上述代码,与第一个代码不同的是在于printf(""); 语句里面的%s; %s:打印字符串,而打印字符串只需要知道起始位置就可以,而ps里面放的是‘a'的地址!则可以顺序打印出来abcdef;


因此最后的打印结果为: abcdef


12c3b7f3f8814309a195c64f051d4445.png


3.字符串的比较


#include <stdio.h>
int main()
{
  char ch1[] = "hello jiyuan";
  char ch2[] = "hello jiyuan";
  const char* ch3[] = "hello jiyuan";
  const char* ch4[] = "hello jiyuan";
  if (ch1 == ch2)
  {
  printf("相同\n");
  }
  else
  {
  printf("不相同\n");
  }
  if (ch3 == ch4)
  {
  printf("相同\n");
  }
  else
  {
  printf("不相同\n");
  }
  return 0;
}

在上述代码中,笔者首先定义了两个数组: ch1[], ch2[]; 在这两个数组里面,输入的字符串是一样的,但是再内存中,开辟了两个地址来存放这两个字符串,因此地址是不一样的!


然后笔者定义了两个:const char* 类型的字符串: ch3[], ch4[];里面存放着相同的字符串,常量字符串不能修改!则,存放ch3[] 与存放ch4[] 元素的地址相同!


然而,在下方if语句里面,咋一看吓到了不少人,但是,数组名是数组首元素的地址!所以,在if语句里面比较的是:地址!


所以最后的结果显而易见!


如果读者想比较字符串的内容,则可以使用库函数:strcmp();


即:ch1[] 与 ch2[] 一样 ;  ch3[] 与 ch4[] 一样!在此笔者就不做过多的讲述!


相关文章
|
5月前
|
存储 编译器 C语言
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
112 0
|
5月前
|
存储 C++
使用字符指针变量和字符数组的比较
使用字符指针变量和字符数组的比较
43 0
|
5月前
|
C语言
C语言----字符数组&&指针
C语言----字符数组&&指针
40 0
|
12月前
|
存储 编译器 C语言
C语言之字符指针
C语言之字符指针
|
5月前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
39 3
|
5月前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
49 2
|
5月前
DAY-2 | 哈希表、指针与区间划分:字符种数统计问题
```markdown ## 题干 [牛客网链接](https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50) ## 题解 1. **查表法(哈希表)**:利用数组标记出现过的 ASCII 值小于127的字符,首次出现计数,重复则忽略。 2. **指针与区间划分(回头法)**:遍历字符串,对每个字符检查其前所有字符是否重复,重复则不计数。 ## 方法总结 - 哈希表在去重问题中非常实用,可多做相关练习。 - 使用`continue`时注意避免死循环,确保循环变量会改变。 - 多回顾此类问题以巩固理解。 ```
39 2
|
5月前
|
存储 C语言
C语言中的字符指针技术详解
C语言中的字符指针技术详解
43 0
|
5月前
|
存储 人工智能
字符指针变量和字符数组注意事项(区别)
字符指针变量和字符数组注意事项(区别)
29 0
|
5月前
|
安全 C语言 C++
字符指针做函数参数
字符指针做函数参数
26 1