c++ const char *[] or char [][]

char ch1[][6]={"hello","world"};
char *ch2[6]={"hello"};
std::cout<<sizeof(ch2)<<" : "<<strlen(*ch2)<<"\n"; //sizeof(char*) : 5
std::cout<<sizeof(ch1)<<" : "<<strlen(*ch1)<<"\n"; //12 : 5

到刚刚为止,一直以为这两个是等价的。打脸了。。。

其实我想说的是第二个编译也过不了。。。

char *ch2[] 首先是ch2是一个数组,数组里面是指向const字符串的指针。所以必须是这样的形式 const char *ch2[]; perfect

时间: 2024-08-09 06:33:27

c++ const char *[] or char [][]的相关文章

const char*、char*、char* const、char[]、string的区别

1.const char* p: p is a pointer to const char(char const* p 一样)   意思就是不能通过p指针来修改p指向的内容(但是内容可以修改).2.char* p      : p is a pointer to char   意思就是可通过p指针来修改p指向的内容3.char* const p: p is a const pointer to char   意思就是p指针是一个常指针,他指向的内存地址不能变,定义的时候就得初始化   一旦给指针

【C++】int、const char*、char*、char、string之间的转换

#include "stdafx.h" #include<string> #include<vector> #include<iostream> #include<sstream> #include<stdio.h> #include<stdlib.h> using namespace std; //sstream string int2str1(int n){ ostringstream oss; oss <

已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy

已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串.不调用C++/C 的字符串库函数,请编写函数 strcpy. /*编写strcpy函数(10分)已知strcpy函数的原型是??? char *strcpy(char *strDest, const char *strSrc);??? 其中strDest是目的字符串,strSrc是源字符串.(1)不调用C++/C的字

C 和 OC 字符串转换 NSString 和 char * 转换 const char* 与 char *

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { char *s = "Hello"; //C - > OC NSString * str1 = [[NSString alloc] initWithUTF8String:s]; //OC -> C const char *p1 = [str1 UTF8String]; const char *p2 = [str1

const char *p; char const *p; char * const p的区别

请看下面三种定义: const char *p; char const *p; char * const p; 首先看第一种,我们先看p,本着"从里往外"的原则,p是一个char *类型的变量,但char *前面有一个const修饰,即p所指向的内容为const类型不可修改,我们可以写如下程序进行实验,当试图对p指向的数组的第一个元素进行修改时,编译即可发现报错: 第二种:char const *p;  const位于char *之间,由于char *是p的类型,此种写法和const

深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的:指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 .若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写

【转】深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

一.可能的组合: (1)const char*p (2)char const*p (3)char *const p(4)const char **p (5)char const**p (6)char *const *p (7)char **const p 当然还有在(5).(6).(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了! 二.理解助记法宝: 1.关键看const 修饰谁. 2.由于没有 const *的运算,若出现 const * 的形式,则const实际上

char*,const char*,char[],string之间的转换问题。

#include <iostream> #include <stdlib.h> #include <string> using namespace std; int main() { // string和const char*互转 const char* a; string str_1 = "my name is pang"; a = str_1.c_str(); cout<<a<<endl; //const char*转st

理解C/C++中const char*、char* const、const char* const、char* const*等等

先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 char* s[] = { "aaa", "bbb", "cc" }; 也就是在char前面加个const,因为"aaa"."bbb"."cc"都是字符串字面值(string literal),在C++标准中string literal只能转换成const char*,原因是即使

string、const char*、 char* 、char[]相互转换

转化总结如下: 源格式 目标格式 string const char* char* char[] string NULL const char*=string.c_str(); const char*=string.c_str(); char*=<const_cast><char*>(const char*); for(int i=0;i< string.length();i++) { char[i]=string[];} const char* string =const