c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系。
#include <stdio.h>
int main(void){
char str = "hello";
char *ptr = "abcd"; // 这里定义ptr为 char类型的指针, ptr的地址会指向这个字符串的首个字符, 。
int i;
for(i=0;i<4;i++){ //
printf("%c",ptr[i]); // 或 *(p+i)
}
printf("%s",ptr);
return 0;
}
//再看一个例子,用指针来计算一个字符串的长度
#include <stdio.h>
//用指针求字符串长度
size_t str_len(const char *p){ //这里的size_t 是 size type ,一种整数类型,这里直接用 int代替size_t当然也许,但是用这样一种特殊的int会使代码更好阅读,因为既知道了数据类型又知道了数据的作用
//这里要注意,函数通过指针进行操作时,应该避免该函数对指向空间的非必要操作,适当的加上 const,程序不是仅仅实现了功能就行了
size_t i=0;
while(*p++)
i++;
return size_t;
}
int main(void){
char str1[]="hello world";
int len=0;
len=str_len(str1);//前面看到这个str_len函数的形参是 char *p ,这里传递的实参是 str1, 说明这种指针参数传递会有一个转换过程,这里是把str1的首字符的地址传了进来
printf("%d",len);
return 0;
}
//用指针实现字符串的复制
#include <stdio.h>
char str_copy(char *p,const char *d){
while(*p++=*d++) //这种写法会先赋值后再自增,
;
}
int main(void){
char str1[]="hello";
char str2[]="world"; //如果不指明下标,编译的时候会根据字符数分配空间
str_copy(str1,str2);
printf("%s",str1); //str1会变成world,表面上看对了,但还是有疑问,由于前面定义字符串赋值没有给下标,当str2的字符数多于str1的字符数,用这种指针操作可能在str1原来的内存空间范围外赋值,可能会覆盖其他的数据
return 0;
}
很多函数其实已经封装好了,可以拿来直接用
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//常用字符串 函数
int main(void){
char str1[]="hello";
char str2[]="world";
char str3[]="goodidea";
printf("%d",strlen(str1)); // strlen 求字符串长度
strcpy(str1,str2);
printf("%s \n",strcpy(str1,str2)); //strcpy 把一个字符串接到另一个字符串后面
printf("%s \n",strncpy(str1,str3,2)); //strncpy 同上,从n位开始操作
char str5[]="ni ";
char str6[]="hao";
printf("%s \n", strcat(str5,str6)) ;
char str7[]="123";
printf("%d \n", atoi(str7)) ; // alphanumeric to integer
char str8[]="123";
printf("%d \n", atol(str8)) ; //alphanumeric to long
char str9[]="12.31";
printf("%d \n", atof(str9)) ; //alphanumeric to float
return 0;
}
c语言学习笔记 - 指针和字符串的更多相关文章
- C语言学习笔记--指针与字符串
字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 字符串
C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...
- c语言学习笔记.指针.
指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...
- C语言学习笔记--指针阅读技巧
1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- C语言学习笔记--指针概念
指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
随机推荐
- CSS3 RGBA等于RGB加上opacity吗?
在我们前端设计里有两篇教程: CSS3 RGBA colors使用说明 css3中opacity属性学习与实践,他们公别介绍了RGBA,RGB,opacity的用法,这里我们把这三个属性放在一起来考虑 ...
- Vue项目的配置项
目录 Vue项目的配置项 配置项 加载全局css文件 加载全局js文件 store仓库的配置和简单用法 BootStrap环境和jQuery的配置 前端后端交互(CORS问题) axios配置项(前端 ...
- mysql DOS中中文乱码 ERROR 1366 (HY000): Incorrect string value: '\xC4\xEA\xBC\xB6' for column 'xxx' at row 1
问题:ERROR (HY000): Incorrect string value: 在DOS中插入或查询中文出现乱码 登入mysql,输入命令:show variables like '%char%' ...
- Ansible配置及使用
使用公私钥实现ssh无密码登录 生成公钥和私钥 ssh-keygen -t rsa 公钥相当于锁id_rsa.pub,私钥相当于钥匙id_rsa 借用ssh-copy-id工具实现无密码登录 ssh- ...
- Linux sed命令实现替换文本内容
/root/data/code-s3201/publish_codex/deploy/db.properties db.properties中的 1.0.0.6 替换为 1.0.0.7 sed -i ...
- 【luoguP4721】分治 FFT
description 给定长度为\(n-1\)的数组\(g[1],g[2],..,g[n-1]\),求\(f[0],f[1],..,f[n-1]\),其中 \[f[i]=\sum_{j=1}^if[ ...
- SQL Server Management Studio 的账号密码
使用“Windows身份验证”方式无法登陆 使用“SQL Server身份验证” 方式无法登陆 解决办法:关闭当前所有服务.通过[Microsoft SQL Server 2008]|[配置工具]|[ ...
- thinkphp 获取内容
如果需要获取渲染模板的输出内容而不是直接输出,可以使用fetch方法. fetch方法的用法和display基本一致(只是不需要指定输出编码和输出类型): 大理石平台规格 fetch('模板文件') ...
- C++——虚继承(不要使用,会导致二义性)
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性 总结: 如果一个派生类从多个基类派生,而这些基类又有一个共同 的基类,则在对该基类中声明 ...
- 用连接池链接redis
package com.itheima.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; i ...