網站首頁 編程語言 正文
一、字符數組 與 字符串
char a[10] = {'a','b','c',...};
字符串:多個字符串在一起,用""括起來,以'\0'作為結束標志
1、一維數組
char a[10] = {"hello\0"};
puts(a);
gets(a);
2、二維數組
char a[3][10] = {"hello","world","China"};
puts(a[0]);
puts(a[1]);
puts(a[2]);
puts(&a[0][3]); -- 打印出"lo"
對于字符串,定義的時候如果沒有初始化(清0),在后面賦值的時候一定要加上'\0',否則會出現亂碼
如何去打印一維數組的字符串
1、puts(a);
2、printf("%s",a);
如何去打印二維數組的字符串
for(i = 0; i < 3; i++)
1、puts(a[i]);
2、printf("%s",a[i]);
二、字符串操作函數
1、strlen
頭文件
#include <string.h>
格式
size_t strlen(const char *s);
功能
計算給定的字符串長度,不包括'\0'
參數
s -- 表示要求長度的字符串
返回值
給定字符串的長度,不包括'\0'
strlen 和 sizeof區別
(1)sizeof是一個關鍵字,strlen()是一個函數
(2)sizeof會計算'\0'
(3)sizeof()不能返回動態分配的內存空間大小
strnlen
size_t strnlen(const char *s, size_t maxlen);
功能:字符串實際個數 <= maxlen 返回字符串實際個數
> maxlen 返回maxlen
2、strcat
頭文件
#include <string.h>
格式
char *strcat(char *dest, const char *src);
功能
將字符串src追加到dest的末尾
參數
dest -- 目標字符串
src -- 源字符串
返回值
返回追加之后的新的字符串dest的首地址
char *strncat(char *dest, const char *src, size_t n);
n -- 追加的最大字符數量
3、strcpy – 覆蓋
頭文件
#include <string.h>
格式
char *strcpy(char *dest, const char *src);
功能
將字符串src的內容拷貝到首地址為dest的空間
參數
dest -- 目標字符串
src -- 要復制的字符串
返回值
返回拷貝之后的新的字符串dest的首地址
char *strncpy(char *dest, const char *src, size_t n);
n -- 指定多少個字符復制過去
4、strcmp
頭文件
#include <string.h>
格式
int strcmp(const char *s1, const char *s2);
功能
比較兩個字符串大小,比較ASCII碼,對位比較
參數
要比較的兩個字符串
返回值
s1 > s2 返回大于0的數
s1 = s2 0
s1 < s2 返回小于0的數
int strncmp(const char *s1, const char *s2, size_t n);
n -- 指定比較的字符個數
5、strstr
頭文件
#include <string.h>
格式
char *strstr(const char *haystack, const char *needle);
功能
檢索子串在字符串首次出現的位置
參數
haystack -- 被檢索的字符串
needle -- 要檢索的子串
返回值
返回needle首次出現的位置,如果沒有返回NULL
三、指針(地址) – 指針是一個變量
1、指針:<存儲類型><數據類型> * <指針變量名>;
數據類型:<數據類型> + * --- 構成了一個新的數據類型
代表:指針所指向的數據的數據類型
初始化:
int a = 10;
int *p = &a;//int *p;
p = &a;
指針變量:實際上也是一個普通變量,特殊在于里面存放的地址
(也有自己的內存空間)
如果指針變量沒有賦值,它里面存儲的是隨機地址
2、指針的運算符 -- &(取地址) *(取內容)
int a = 10;
int *p;
p = &a;
*p = *(&a); ==> *p = a;
& 和 * 是互為逆運算
除了數組名以外,64位操作系統所有的地址用sizeof求大小得到的都是8個字節,32位是4個字節
3、指針的運算 -- 通過 間接訪問 的形式,去操作原來的變量
int i = 10;
int *p = &i;
i = 5; //直接訪問:直接操作i
*p = 5;//間接訪問:通過i的地址去操作i
int j = *p*10; --> j = i * 10;
4、指針變量的運算 -- 地址的偏移(一般用于數組)
非單獨使用:
p++:先使用p中存放的地址,再向高地址位偏移一個數據類型單位
++p:先向高地址位偏移一個數據類型單位,再使用p中存放的地址
p+N:向高地址位偏移N個數據類型單位
p-N:向低地址位偏移N個數據類型單位
p-q:指針變量 - 指針變量 = 中間相差了多少個數據類型單位
5、特殊指針
(1)野指針:沒有初始化 且 沒有賦值的指針
可能會報段錯誤
段錯誤:非法訪問內存
int *p;
printf("%d\n",*p);
(2)空指針:指向零地址空間的指針
一定會報段錯誤
int *p = NULL;
printf("%d\n",*p);
(3)空類型指針(void *) -- 可以存放任何類型的地址
注意:在使用的時候,一定要進行強轉
原文鏈接:https://blog.csdn.net/qq_64076967/article/details/125835786
相關推薦
- 2022-08-18 python列表生成器常用迭代器示例詳解_python
- 2023-03-01 shell?創建子進程及并行延時執行命令方法_linux shell
- 2023-11-17 RuntimeError: a view of a leaf Variable that requi
- 2022-08-03 C#記一次http協議multipart/form-data的boundary問題_C#教程
- 2022-12-22 React類組件和函數組件對比-Hooks的簡介_React
- 2022-06-09 ASP.NET?Core使用EF創建模型(包含屬性、排除屬性、主鍵和生成值)_實用技巧
- 2023-04-19 清楚詳解Android?進程間圖傳遞圖形buffer原理_Android
- 2022-07-20 Rust?搭建一個小程序運行環境的方法詳解_相關技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支