字符指针和字符数组的使用区别

先看一个程序代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
	char str1[] = "abc";
	char str2[] = "abc";
	char *str3 = "abc";
	char *str4 = "abc";
	//judge str1 is equal str2
	if(str1 == str2){
	    cout<<"str1 == str2"<<endl;
	}
	else{
	    cout<<"str1 != str2"<<endl;
	}
	//judge str3 is equal str4
	if(str3 == str4){
	    cout<<"str3 == str4"<<endl;
	}
	else{
	    cout<<"str3 != str4"<<endl;
	}
	return 0;
}

输出结果是

str1 != str2

str3 == str4

解释如下:

1. str1和str2是两个字符数组,分别存储在栈空间上。str1表示这个字符数组的内存首地址,str2表示另一个字符数组的首地址,因为两个首地址是不同的所以str1 != str2。如图所示

2. str3和str4是两个指针,都是指向“abc”的内存首地址。"abc"是存储在内存中的某一个快地址,str3和str4同时指向这个首地址,因此str3 == str4,如图所示

3. 要获得str1和str2的地址为 &str1和&str2,并且有 &str1 != &str2;同时也有&str3 != &str4,因此这是获得指针变量在内存的地址,所以两个指针变量在内存中存储位置是不同的。

4. 要比较两个字符数组是否相同可以使用strcmp函数,而比较两个字符指针指向内容是否相同直接使用指针比较即可。

时间: 2024-10-26 05:58:02

字符指针和字符数组的使用区别的相关文章

c++问题-c++中用字符指针指向字符串会溢出吗

问题描述 c++中用字符指针指向字符串会溢出吗 使用这个字符指针会出现一些问题吗? 对这个字符串有限制吗新人求解 解决方案 http://www.cplusplus.com/reference/string/string/?kw=string 希望有帮助 解决方案二: 用字符指针指向一个字符串C++中的字符串指针和字符数组字符数组和字符串指针 解决方案三: 指针是有可能下标越界的.

C/C++(字符串处理)字符指针、字符数组用法大总结

字符指针变量和字符数组都可以处理字符.字符串,但是两者却有着本质的区别.今天用到就把所有的总结一下,以供大家参考! 1.字符数组初始化及赋值 char c_a[] = {"songjinshi"};//正确 char c_a[] = {'s','o'};//正确 char c_a[] = "songjinshi";//正确 char c_a[11]; c_a = "songjinshi";//错误,c_a是一个指针常量不能直接赋值 c_a++;/

c语言-C语言关于字符指针变量和字符数组的说法

问题描述 C语言关于字符指针变量和字符数组的说法 下列关于字符指针变量和字符数组的说法错误的是 A)字符指针变量的值可以变化 B)字符数组的值可以变化 C)字符指针变量代表了一个地址 D)字符数组代表了一个地址 ====答案选B,求解释? 解决方案 选择B.字符数组相当于指针常量. 解决方案二: 数组定义时系统给开辟内存单元,数组名相当于数组的开始地址是不能变化的 解决方案三: C语言字符指针和字符数组C语言中,为什么字符串可以赋值给字符指针变量字符数组和字符指针

malloc-C语言中的字符指针操作问题,如何释放字符指针空间?

问题描述 C语言中的字符指针操作问题,如何释放字符指针空间? 源码如下: #include #include #include void main() { char s1; char *s2 = "bbb"; char *s3 = "ccc"; s1 = (char)malloc(sizeof(s2)); strcpy(s1, s2); strcat(s1, s3); //free(s2); //free(s3); printf("%s ", s

c++ 指针-c++字符指针出错,求解

问题描述 c++字符指针出错,求解 使用c型字符指针时,使用cout输出,结果输出的是内存位置.数字的指针都没问题,求助. 解决方案 你怎么输出的,有没有加上include string #include <string> #include <iostream> using namespace std; int main() { char ch[] = "hello"; cout << &ch[0] << endl; return

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

C/C++中字符指针数组及指向指针的指针的含义

就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看代码中的注解: #include <iostream>#include <string>using namespace std; void print_char(char* array[],int len);//函数原形声明void main(void){//-----------------------------段1----------

字符数组与字符指针的问题

问题描述 字符数组与字符指针的问题 include int main(void) { char*str="hello"; return 0; } ///////////////////////////////我的疑惑是:为什么上面可以,下面的不可以? include int main(void) { char*str; scanf("%s",str); return 0; } 解决方案 唔..比如这样一段代码 通过调试得知指针变量s地址为0xbffff344:str

字符数组,字符指针,sizeof,strlen总结

先看下面这一段代码,读者可以自己思考一下,是否自己可以完全答对 // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include<cstdio> #include <string> using namespace std; struct{ short a1; short a2; s