首页 > 其他分享 >指针详解(C语言进阶)

指针详解(C语言进阶)

时间:2023-01-07 17:01:06浏览次数:52  
标签:进阶 int C语言 char 详解 arr2 printf abcdef 指针

  • 字符指针
  • 指针数组

自学b站“鹏哥C语言”笔记。本章笔记不全。

回顾:在文章【初识指针】中,我们已经了解到的指针概念有

  • 指针是一种变量,用来存放地址,地址唯一标识一块内存空间。
  • 指针的大小是固定的,在32平台中是4字节,在64平台中是8字节。
  • 指针的不同类型决定了指针+-整数的步长,决定了解引用操作能访问的空间大小。
  • 指针的运算。

一、字符指针

字符指针char*

一般使用方法

int main()
{
char ch = 'w';
char* pc = &ch;
*pc = 'w';
return 0;
}

另一种使用方法

int main()
{
char* p = "abcdef";
printf("%c\n", *p);
printf("%s\n", p);
return 0;
}

输出结果:a abcdef

解析:

​char* p = "abcdef";​

并不是把abcdef赋值给p,而是把首字符a的地址赋值给p

​printf("%c\n", *p);​​中%c是打印一个字符,解引用p的地址后打印出a

​printf("%s\n", p);​​中%s是打印一个字符串,指针的这种用法是正确的

例1:

#include <stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
if(arr1 == arr2)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}

输出结果:haha

解析:

数组名是数组的首元素地址,arr1和arr2自然是不相等的。

变式:

#include <stdio.h>
int main()
{
char* p1 = "abcdef";
char* p2 = "abcdef";
if(p1 == arr2)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}

输出结果:hehe

解析:

“abcdef”是常量字符串,是无法更改的,内存默认只存储一份

而第4、5行代码中p1、p2的值是“abcdef”的首元素地址,是相同的。

二、指针数组

指针数组是存放指针的数组

int* arr1[10];//整型指针的数组
char* arr2[4];//一级字符指针的数组
char** arr3[5];//二级字符指针的数组

运用:

#include <stdio.h>
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = {2,3,4,5,6};
int arr3[] = {3,4,5,6,7};

int* parr[] = {arr1, arr2, arr3};
int i = 0;
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<5; j++)
{
printf("%d ", *(parr[i]+j));
}
printf("\n")
}
return 0;
}

输出结果:

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7


标签:进阶,int,C语言,char,详解,arr2,printf,abcdef,指针
From: https://blog.51cto.com/u_15883132/5995641

相关文章

  • 【C语言 数据结构】二叉树
    文章目录​​二叉树​​​​一、二叉树的概念​​​​二、二叉树的基本形态​​​​三、二叉树的性质​​​​四、特殊的二叉树​​​​五、二叉树的存储结构​​​​5.1......
  • C语言校园跳蚤市场信息交流平台
    C语言校园跳蚤市场信息交流平台[任务描述]设计一个校园跳蚤市场信息交流平台,为同学们交换二手物品提供便利。[功能要求](1)管理员功能:管理员对待销或求购的二手物品......
  • C语言程序设计课程设计[2023-01-07]
    C语言程序设计课程设计[2023-01-07]C语言程序设计课程设计要求一、课程设计目的1.进一步掌握和利用C语言进行程设计的能力;2.进一步理解和运用结构化程设计的思想和......
  • Python----函数进阶
    函数的返回值作为参数传递给其他函数deffunc():return50deffunc1(num):print(num+100)func1(func())函数返回多个值deffunc():#返回值可以是......
  • c语言的主要用途是什么?
    C语言的用途可以概括如下: 1)系统编程C语言可移植性好,性能高,能够直接访问硬件地址,而且到达某个地址的时间非常短,这使得C语言天生适合开发操作系统或者嵌入式应用程序。在......
  • 【数据结构】C语言实现的AVL树操作集
    看到网上完整的AVL树操作集较少,索性自己写了一个,望大佬指教!不多废话,上代码:AVLTREE.h头文件1#pragmaonce2#include<stdio.h>3#include<stdlib.h>4#inclu......
  • C语言百日刷题第一天
    猜名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每......
  • LaTeX 进阶语法
    目录LaTeX进阶语法一、样式排版1、字体和字号1.1字体样式1.2字号1.3ctex宏包更改中文字体1.4文字装饰2、段落格式和间距2.1长度和长度变量2.2行距2.3段落格式2.4......
  • X-Forwarded-For详解、如何获取到客户端IP
    我们先看看官方定义X-Forwarded-ForX-Forwarded-For(XFF)在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地......
  • WEB渗透SQL注入【3】SQLmap使用详解(8)
    SQLmap介绍sqlmap是一个由python语言编写的开源的渗透测试工具,它主要是检测SQL注入漏洞,是一款功能强大的SQL漏洞检测利用工具。他可以检测的数据库有:access、msSQL......