关于char * ch指针和char ch [10]数组的区别

问题描述

关于char * ch指针和char ch [10]数组的区别
char ch1[10];
char * ch2;
如果现在要将一个c风格字符串赋给这两个对象,
void copy1(char ch1[10]char * temp)
void copy2(char * ch2char * temp)
为什么后者可以直接ch2=temp而前者只能用strcpy?

解决方案

ch2是指针,所以=temp,其实做的是指针地址赋值而已,这样ch2也指向temp那一块内存

而ch1是一个数组,你要给它赋值,就需要把内容复制到数组中,所以需要strcpy

解决方案二:
ch2是指针,放的是地址,用ch2=temp来赋值,是把temp的地址赋给ch2,并且ch2自己是没有空间来存放数据的,之所以不能ch1=temp这么写,是因为ch1有自己的空间,如果改变他的地址,那么这个地址指向的空间也就变了

解决方案三:
ch2存储的是地址,也就是指向字符串首地址的一个地址变量来的,因为temp的类型和ch2一样,所以可以直接赋值,char ch1[10],变量存储的是普
通的数值,并不是地址,所以使用strcpy

解决方案四:
区别不大。只是char * ch指针很容易修正而去指向其他char类型的变量。且维度不需要考虑。
char ch[10],ch的维度是固定,不太灵活。
两者的指针操作差不多。

解决方案五:
你直接ch1=temp估计也行,因为ch2是指针,直接取了字符串的首地址,而你直接用ch1也是取了ch1[]数组的首地址,应该也行

解决方案六:
ch2是指针,可以赋值=temp,这样ch2也指向temp那一块内存地址.

而ch1是数组,给它赋值,就需要把内容复制到数组中,所以需要strcpy.

解决方案七:
你没有理解指针的含义,指针只是指向某一地址,数组则表达的含义是存储的数据。

解决方案八:
指针是指向地址, p1 = p2 p2的地址赋给p1
数组 及地址是固定的。 不能更改。只能修改里面的内容。

解决方案九:
Ch2是指针,可以直接把指针变量赋值给他。。

时间: 2024-08-03 16:17:37

关于char * ch指针和char ch [10]数组的区别的相关文章

语言 指针类型-C语言中, 指针类型char*有什么意义。

问题描述 C语言中, 指针类型char*有什么意义. C语言中,void*与char*之类的指针类型相比,有什么特殊的用途? 解决方案 如果定义成 void * 时,就无法取指针中的数据,因为数据类型不明确. 想要取 void * 中的数据,需要转换成想要的类型指针,如 char * 或 int * . 一般 void * 做参数参数时使用,可以接受 char * 或 int * 等其它类型指针的传入.如果定义成 char * 等固定类型,则无法接收除 char * 外的其它类型指针. 解决方案

编程c语言-c语言指针问题 char *p="abcdefg"+1; 为什么会报错,const char*无法转换为char*

问题描述 c语言指针问题 char *p="abcdefg"+1: 为什么会报错,const char*无法转换为char* char p="abcdefg"+1: 为什么会报错,const char无法转换为char* 解决方案 abcdefg是const 不能直接加一 解决方案二: 我想我知道了,字符串是const的对象所以指向他的指针也必须用const修饰,但这样又有个问题了char* p="ddd":为什么就可以呢?"ddd&q

浅析char 指针变量char *=p 这个语句的输出问题_C 语言

学习指针的时候我一直有个疑惑,请看下面的代码: #include <iostream> using std::cout; void main() { int num=5; int *nPtr=&num; cout<<nPtr;//输出指针的地址.但是会报错<<没有直接输出int *地址的功能 return ; } 但是,将int 改成char 类型就不会报错,可以输出字符串.同样是指针,这次为何没有输出地址(理应输出指针代表的地址,但是<<并没有重载

指针与数组的区别详解

 指针是C语言的精华,它是一柄"双刃剑",用的好与坏就看使用者的功力了.下面就一道测试题,看一下指针与数组的区别.   char *p1, *p2;char ch[12];char **pp; p1 = ch; pp = &ch; p2 = *pp; 问p1和p2是否相同       题目如上,找出其中的不妥之处.       首先,数组ch是没有初始化的.其次,一个比较隐含的地方是,数组名可以代表数组第一个元素的首地址,这个没有问题,但是,数组名并非一个变量,数组分配 完成后

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语言中指针用星号和箭头表示有区别吗

问题描述 C语言中指针用星号和箭头表示有区别吗 C语言中指针用星号和箭头表示有区别吗 p ++和i→next表达意思一样吗?菜鸟一个,请各位多多 指点下! 解决方案 C语言字符指针和字符数组的区别 解决方案二: ->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符".". 用法: p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p->a引用了指针p指向的结构体的成员a. 例如: struct T { int a; char b

指针符号建立字符串和数组建立字符串的区别,代码如下

问题描述 指针符号建立字符串和数组建立字符串的区别,代码如下 #include int main(void) { char str1[]; //这里用char *str1的话,不会报错,但是不会输出键入的字符串 //char *str1; fgets(str1,5,stdin); puts(str1); return 0; } 求原因 解决方案 指针若是指向数组首地址,效果一样的. 若是没有进行初始化,指针的地址是不确定的(编译为调试版本时,地址为0xcccccccc),不知道指向哪里,程序的行

visual studio-vs2013调试中,如何通过指针监视二维动态数组的值?

问题描述 vs2013调试中,如何通过指针监视二维动态数组的值? int **p = new int *[row]; for (i = 0; i < row; i++) p[i] = new int[column]; 比如说我用上面语句创建额一个row行column列的数组,调试的时候怎样在监视窗口中,看到整个二维数组的值呢? 如果是一维的,例如int *p=new int[5]: 可以将p,5写到监视名称里,可二维的我就不知道了...求帮助 解决方案 调试状态下,调试->窗口->内存,

c语言-双重指针定义动态二维数组

问题描述 双重指针定义动态二维数组 指针符号太多了 求解释每个指针符号 问:?二重指针 太多 求解释一下各个 p=(int **)malloc(sizeof(int *)*line); if(NULL==p) { return; } for(i=0;i<line;i++) { *(p+i)=(int *)malloc(sizeof(int)*row); if(NULL==*(p+i)) { return; } } 解决方案 首先我来看malloc做了什么,申请了一组空间,存放int型指针,返回这