前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系。

#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语言学习笔记 - 指针和字符串的更多相关文章

  1. C语言学习笔记--指针与字符串

    字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...

  2. c语言学习笔记 - 指针和数组

    结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...

  3. 吴裕雄--天生自然C++语言学习笔记:C++ 字符串

    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...

  4. c语言学习笔记.指针.

    指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...

  5. C语言学习笔记--指针阅读技巧

    1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...

  6. C语言学习笔记--指针和数组的关系

    1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...

  7. C语言学习笔记--指针概念

    指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...

  8. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  9. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

随机推荐

  1. Merge k Sorted Arrays【合并k个有序数组】【优先队列】

    Given k sorted integer arrays, merge them into one sorted array. Example Given 3 sorted arrays: [ [1 ...

  2. Jmeter-----请求依赖之JsonExtractor

    层级关系填写: 1.第一个必须是$ 2.用英文状态下的  . 来代表下一个层级

  3. JS对象 指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

    指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回 ...

  4. ASP.NET打开项目错误:将指定的计数添加到该信号量中会导致其超过最大计数。

    1.错误如图 2.解决方案 重启IIS即可,运行-> 输入IISRESET 命令 即可重启IIS,如图

  5. c_数据结构_二叉树的遍历实现

    #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #d ...

  6. scala中的闭包简单使用

    object Closure { /** * scala中的闭包 * 函数在变量不处于其有效作用域内,还能够对变量进行访问 * * @param args */ def main(args: Arra ...

  7. thinkphp 运算符

    我们可以对模板输出使用运算符,包括对“+”“ –” “*” “/”和“%”的支持. 大理石平台厂家 例如: 运算符 使用示例 + {$a+$b} - {$a-$b} * {$a*$b} / {$a/$ ...

  8. (转)SQL盲注攻击的简单介绍

    转:http://hi.baidu.com/duwang1104/item/65a6603056aee780c3cf2968 1 简介     1.1 普通SQL注入技术概述     目前没有对SQL ...

  9. VS2008编译出现问题:error C2485: “__restrict”: 无法识别的扩展属性 解决办法

    错误:Error3 error C2485: '__restrict' : unrecognized extended attribute f:\program files\microsoft vis ...

  10. Hadoop 与 Spark 对比

    Hadoop进行海量数据分析,MR频繁落地,IO操作,计算时间就拉长.由于这种设计影响,计算过程中不能进行迭代计算.造成网络节点数据传输. Spark从理念上就开始改变.应用scala特点解决上面的核 ...