網(wǎng)站首頁 編程語言 正文
一、字符數(shù)組 與 字符串
char a[10] = {'a','b','c',...};
字符串:多個字符串在一起,用""括起來,以'\0'作為結束標志
1、一維數(shù)組
char a[10] = {"hello\0"};
puts(a);
gets(a);
2、二維數(shù)組
char a[3][10] = {"hello","world","China"};
puts(a[0]);
puts(a[1]);
puts(a[2]);
puts(&a[0][3]); -- 打印出"lo"
對于字符串,定義的時候如果沒有初始化(清0),在后面賦值的時候一定要加上'\0',否則會出現(xiàn)亂碼
如何去打印一維數(shù)組的字符串
1、puts(a);
2、printf("%s",a);
如何去打印二維數(shù)組的字符串
for(i = 0; i < 3; i++)
1、puts(a[i]);
2、printf("%s",a[i]);
二、字符串操作函數(shù)
1、strlen
頭文件
#include <string.h>
格式
size_t strlen(const char *s);
功能
計算給定的字符串長度,不包括'\0'
參數(shù)
s -- 表示要求長度的字符串
返回值
給定字符串的長度,不包括'\0'
strlen 和 sizeof區(qū)別
(1)sizeof是一個關鍵字,strlen()是一個函數(shù)
(2)sizeof會計算'\0'
(3)sizeof()不能返回動態(tài)分配的內存空間大小
strnlen
size_t strnlen(const char *s, size_t maxlen);
功能:字符串實際個數(shù) <= maxlen 返回字符串實際個數(shù)
> maxlen 返回maxlen
2、strcat
頭文件
#include <string.h>
格式
char *strcat(char *dest, const char *src);
功能
將字符串src追加到dest的末尾
參數(shù)
dest -- 目標字符串
src -- 源字符串
返回值
返回追加之后的新的字符串dest的首地址
char *strncat(char *dest, const char *src, size_t n);
n -- 追加的最大字符數(shù)量
3、strcpy – 覆蓋
頭文件
#include <string.h>
格式
char *strcpy(char *dest, const char *src);
功能
將字符串src的內容拷貝到首地址為dest的空間
參數(shù)
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碼,對位比較
參數(shù)
要比較的兩個字符串
返回值
s1 > s2 返回大于0的數(shù)
s1 = s2 0
s1 < s2 返回小于0的數(shù)
int strncmp(const char *s1, const char *s2, size_t n);
n -- 指定比較的字符個數(shù)
5、strstr
頭文件
#include <string.h>
格式
char *strstr(const char *haystack, const char *needle);
功能
檢索子串在字符串首次出現(xiàn)的位置
參數(shù)
haystack -- 被檢索的字符串
needle -- 要檢索的子串
返回值
返回needle首次出現(xiàn)的位置,如果沒有返回NULL
三、指針(地址) – 指針是一個變量
1、指針:<存儲類型><數(shù)據(jù)類型> * <指針變量名>;
數(shù)據(jù)類型:<數(shù)據(jù)類型> + * --- 構成了一個新的數(shù)據(jù)類型
代表:指針所指向的數(shù)據(jù)的數(shù)據(jù)類型
初始化:
int a = 10;
int *p = &a;//int *p;
p = &a;
指針變量:實際上也是一個普通變量,特殊在于里面存放的地址
(也有自己的內存空間)
如果指針變量沒有賦值,它里面存儲的是隨機地址
2、指針的運算符 -- &(取地址) *(取內容)
int a = 10;
int *p;
p = &a;
*p = *(&a); ==> *p = a;
& 和 * 是互為逆運算
除了數(shù)組名以外,64位操作系統(tǒng)所有的地址用sizeof求大小得到的都是8個字節(jié),32位是4個字節(jié)
3、指針的運算 -- 通過 間接訪問 的形式,去操作原來的變量
int i = 10;
int *p = &i;
i = 5; //直接訪問:直接操作i
*p = 5;//間接訪問:通過i的地址去操作i
int j = *p*10; --> j = i * 10;
4、指針變量的運算 -- 地址的偏移(一般用于數(shù)組)
非單獨使用:
p++:先使用p中存放的地址,再向高地址位偏移一個數(shù)據(jù)類型單位
++p:先向高地址位偏移一個數(shù)據(jù)類型單位,再使用p中存放的地址
p+N:向高地址位偏移N個數(shù)據(jù)類型單位
p-N:向低地址位偏移N個數(shù)據(jù)類型單位
p-q:指針變量 - 指針變量 = 中間相差了多少個數(shù)據(jù)類型單位
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-05-25 STL中的string你了解嗎_C 語言
- 2023-02-06 Python?tkinter庫實現(xiàn)登錄注冊基本功能_python
- 2022-06-12 C語言?struct結構體超詳細講解_C 語言
- 2022-04-19 c#中token的使用方法實例_C#教程
- 2022-07-10 fastmock使用-只能模擬get請求
- 2022-05-08 react實現(xiàn)簡單的拖拽功能_React
- 2022-01-21 什么是前端開發(fā)?什么是后端開發(fā)?
- 2022-07-11 UVM中uvm_config_db非直線的設置與獲取
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支