浅谈运用指针引用字符串

一、字符串的引用方式

1.如果字符串存放在字符数组中可以用数组名和下标引用

char string[10] = "Hello word";
printf("%s",string);

2.用字符指针变量指向字符串常量,用字符指针引用字符串

char *strp = "Hello word";
printf("%s",strp);
//系统将字符串常量以字符数组形式保存在内存中,字符串末尾系统自动加了一个‘\0‘。再将字符数组的首地址赋给字符指针,从此字符指针就指向这个字符串的首地址。

二、字符串在函数之间的传递

 // 1.形参、实参都是数组名
void function(char arr[])
{
        . . . .
}

void main()
{
    char arr[10] = "Hello word";
    function(arr);
         . . . .
}

// 2.形参、实参都是字符指针变量
void function(char *p)
{
        . . . .
}

void main()
{
    char *p = "Hello word";
    function(p);
         . . . .
}

// 3.形参是字符指针变量、实参是字符数组
// 4.形参是字符数组、实参是字符指针变量

三、使用字符数组与指针变量的比较

1.char *str = "Hello word";       //合法
 char arr[10] = "Hello word";       //合法
    
 char *str;      
 str = "Hello word";        //合法
 car arr[10];    
 arr = "Hello word";            //不合法  arr是指针常量不能赋值
  arr[10] = "Hello word"           //不合法   应用 strcpy 进行赋值

2.char str[10] = "Hello";
 char *p = "Word";
 str[0] = ‘h‘;           //合法   数组中个元素的值是可以改变的
 p[0] = ‘w‘;                        //不合法    指针变量指向的字符串常量是不可以改变的
 

3. char  *p = "a = %d";
   printf(p,a);               //合法   指针变量指向一个格式字符串,可以用它替代 printf
                                       函数中的格式字符串

程序:

#include<stdio.h>
#include<string.h>
void examp1e1(char ar1[])
{
	printf("%s\n长度为:%d\n大小为:%d\n\n",ar1,strlen(ar1),sizeof(ar1));

}
void example2(char *p)
{
	printf("%s\n长度为:%d\n大小为:%d\n",p,strlen(p),sizeof(p));

}
void main()
{
	char *str1 = "Hello word";
    char str2[20] = "I am a boy";
	char ar[20];
	examp1e1(str1);
	example2(str2);
    
}
时间: 2024-10-15 17:21:02

浅谈运用指针引用字符串的相关文章

浅谈C/C++引用和指针的联系和区别

为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针.不止C/C++使用指针. 每一种编程语言都使用指针.C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了. "Everything uses pointers. C++ just exposes them rather than hiding them," It's easier to give someone an address to your home than to give a

浅谈JavaScript中的字符串操作

  我想,最为一名开发人员,最实际开发过程中,任何一门语言在开发实际的项目的过程中,都是逃不开字符串的操作的下面笔者就自己日常开发过程中所用到的一些字符串的操作方法做一些陈述和总结,当然,如若读者觉得有不足之处,非常欢迎赐教之!!!   首先是一些字符串的拷贝方法,注意哦,同学,题主所列的都是一些浅拷贝,即不会影响到原数组: 1: slice()           2: substr()             3: substring() 鉴于上面的三个方法都有其共同性,题主就不单独介绍了,

浅谈 Objective-C 指针和 Swift2

该译文独家授权给SwiftGG 原文链接:Objective-C Pointers and Swift 2: A Simple Guide 原文日期:2015/08/23 译者:mmoaay 校对:numbbbbb 定稿:shanksyang 本文写于 2015 年 8 月 23 日,与 Xcode7 Beta 版和 Swift 2 兼容 在 Swift 中使用 Objective-C 在 Swift 中读 C 指针 下面这个 Objective-C 方法会返回一个 int 指针,或者说 C 术

浅谈智能指针的历史包袱

我们学习C++的时候,想必都会听说一个叫智能指针的东西,在初听这个词的时候,我们都难免不被“智能”两个字所吸引,感觉它会比较高级,让人有种忍不住想用一把的冲动. 但事实上,它可能并没有我们所想的那样“智能”.好用,它本质上其实就是一个对象,它去接管了原指针所管理的资源.但这里单单用一个对象就想有“智能”的效果并没有那么容易.在智能指针发展的过程中,出现了Autor_ptr等多种版本的智能指针,但它们都确都或多或少有一些问题存在(相信早期的前辈们会深有感触).但智能指针的使用性却是不可否认的.它在

ES6浅谈--解构,字符串扩展

解构: 1.大括号在句首会被认为是代码块,通过加圆括号可以解决问题,但是在声明语句中不能加圆括号,只有在赋值语句的非模式部分可以. 2.数值和布尔值解构会先转换成对象,然后用其包装对象的toString方法取得值再赋值. 3.解构用途:交换变量值:函数返回多个值取值:参数定义:提取json数据:参数默认值:遍历map:模块方法. 字符串扩展: 1.大括号增加unicode范围识别,另外支持for of遍历字符串. 2.模板字符串可以用于输入html文本,用${}做变量识别,反引号用反斜杠转义,t

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

C++ 浅谈C++中指针和引用

浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单

浅谈RAII&智能指针

关于RAII,官方给出的解释是这样的"资源获取就是初始化".听起来貌似不是很懂的哈,其实说的通俗点的话就是它是一种管理资源,避免内存泄漏的一种方法.它可以保证在各种情况下,当你对对象进行使用时先通过构造函数来进行资源的分配和初始化,最后通过析构函数来进行清理,有效的保证了资源的正确分配和释放.(特别是在异常中,因为异常往往会改变代码正确的执行顺序,这就很容易引起资源管理的混乱和内存的泄漏) 其中智能指针就是RAII的一种实现模式,所谓的智能就是它可以自动化的来管理它所指向那份空间的资源

转: 浅谈C/C++中的指针和数组(二)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量