数组很简单,直接定义然后使用就是了:
建立一个数组a[],如int a[20]=“adf”;如果只建立也就是只声明而不赋值,那要之后赋值就要给出一个循环,一个个的给值,
char d[20];
for(i=0;i<20;i++)
d[i]=“要给的”;
但是不可以再直接这么了:a[20]=“adf”;
但是如果想一步到位的给a数组赋值那要怎么办呢?用strcpy或者strncpy了,strcpy(s,“asdfasef”);
那么指针呢?
指针始终要记住一点就是,不可以给没有初始化的指针赋值,因为没有初始化的指针的地址是不定的,或许就是用的程序的地址,data和code地址空间冲突很恐怖的。
那就初始化撒。
指针友很多类型,这个跟声明有关,比如整型,char型,还有结构体型的等等,都是一样的定义,这里就拿int和char型的来试试:
int *q;
*q=1345;
printf("%d\n",q);
这样就要不得的
int *q;
q=(int *)malloc(sizeof(int));
*q=1345;
printf("%d\n",*q);
初始化后,这样就可以。
对char型的,一来可以个给数组地址
char *w;
char s[20]="dddddddd";
w=s;
要么分配一个地址再赋值,不过char的赋值不是像int型的一样*q=1345;而是不带星号的赋值:
char *w;
w=(char *)malloc(20);
w="asdddddd";
printf("s=%s",w);
当然了也可以用strcpy来做,但是指针依然要初始化的,这样是不可以的,
char *w;
//w=(char *)malloc(20);
strcpy(w,"asdfasdf");
printf("s=%s",w);
要给地址的才可以,就是w=(char *)malloc(20);要用上。
malloc之后要free,分配地址其实也可以用new这个是c++里面的东西。就不写了。
还有一种就是string类型的赋值了,只要是给地址就可以的,比如:
char a[20]="aaaaaaaaaa";
string ss;
ss=a;
这个是通过数组地址赋值,也可以用指针:
char *a="aaaaaaaaaa";
string ss;
ss=a;
但是还有一种赋值,就是用string类型的地址给指针或者数组赋值,这样是不可以的,起码再vc里面,比如:
char *p;
char a[20];
string ss="asdfasdf";
a=ss;//不可以的
p=ss;//也不可以的
cout<<p<<endl;
cout <<a<<endl;
错误原因:
D:\hehe\hehe\cpp1\cout.cpp(15) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)
用strcpy(a,ss)或者strcpy(p,ss)也是不可以的。
错误原因:
D:\hehe\hehe\cpp1\cout.cpp(15) : error C2664: 'strcpy' : cannot convert parameter 2 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
分享到:
相关推荐
数组是一组相同类型的元素的集合,通过索引来访问每个元素。指针则是一个变量,它存储的是内存地址,这个地址通常指向一个变量或数组的起始位置。下面我们将详细探讨数组和指针的使用、它们之间的关系以及一些编程...
- **数组的初始化值不能超过声明的大小**,否则会导致编译错误。 ##### 1.3 访问数组元素 通过索引访问数组元素: ``` int a[10]; a[0] = 32; // 给数组的第一个元素赋值 int value = a[5]; // 获取数组第六个元素...
数组是存储同类型数据的集合,分为一维数组、二维数组以及多维数组。 1. 一维数组 - 定义:一维数组由单行元素组成,例如 `int arr[5]` 定义了一个包含5个整数元素的数组。 - 初始化:数组可以在声明时初始化,如...
本篇将详细讲解如何在Java中初始化String类型的一维数组和二维数组。 ### 一、一维String数组的初始化 1. **静态初始化**: 在Java中,可以使用花括号{}来静态初始化一维数组。这种方式允许你在声明数组的同时...
在初始化一维数组时,可以部分初始化,未指定初始值的元素默认值取决于数据类型。 二维数组可以看作是一组一维数组的集合,其定义格式为 `<数据类型> <数组名>[<行数>][<列数>]`,`<行数>`和`<列数>`是正整数常量。...
在初始化一维数组时,可以部分初始化,未指定初始值的元素会默认初始化为0或对应类型的默认值。 二维数组可以看作是一维数组的扩展,用于表示矩阵或表格形式的数据。定义二维数组时,需要指定行数和列数。初始化二...
4. **未初始化的指针**:使用未初始化的指针访问内存可能导致不可预测的结果,一定要确保指针被正确赋值。 5. **数组边界问题**:超出数组边界访问是常见的错误,可能导致内存损坏或程序崩溃,要始终确保索引在有效...
- 一维数组的初始化可以只初始化部分元素,未初始化的元素默认为0(对于`int`类型)。 - 二维数组同样支持初始化,并且可以按照行列分别初始化。 #### 指针与动态内存分配 - **指针概念**: - 指针是一个变量,...
字符数组是一种特殊的数组类型,用于存储一系列字符。它可以用来表示字符串,其中每个元素代表一个字符,而数组的最后一个元素通常包含一个特殊的终止符(通常是`\0`)以标记字符串的结束。 **示例代码**: ```c ...
字符数组也可以通过字符串常量进行初始化,但其内部机制与字符指针略有不同。例如: ```c char str[] = "This is a string."; ``` 此时,str实际上是一个数组,包含了字符串常量的所有字符以及结束符'\0'。 3. 指针...
这两个 new 表达式都分配了含有 10 个对象的数组,其中第一个数组是 string 类型,第二个数组是 int 型。 也可以使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化。例如: ```cpp int *pia2 = new int[10...
在VC++6.0中,动态数组是一种在运行时根据需要分配内存的机制,它可以克服传统数组在编译时必须确定长度和仅限局部作用域的局限性。动态数组使用`new`运算符进行创建,并使用`delete`运算符进行释放,这使得程序员...
数组的初始化允许在声明时提供初始值,未初始化的数组元素将默认设置为0或随机值,具体取决于编译器和数据类型。 字符数组`char ch[14]={'g','l','o','b','l','e',' ','s','t','r','i','n','g','\0'}`则用于存储...
不同的指针类型,如char *、int *、int (*)、string *、float *,都表明了该指针所指向的地址空间的类型。 在C++中,申请和释放堆中分配的存储空间,分别使用new和delete的两个运算符来完成。new运算符返回的是一个...
- 初始化:可以在声明时初始化数组,如 `int a[5] = {1, 2, 3, 4, 5};`。如果不提供足够的初始值,未指定的元素会被自动设置为0(对于整型数组)。 - 访问:数组元素可以通过下标访问,如 `a[0]` 表示数组的第一个...
在初始化字符串时,编译器会在末尾自动添加`'\0'`。`printf`的`%s`和`scanf`的`%s`格式分别用于输出和输入字符串。 9. 字符串处理函数:如`strcmp`用于比较两个字符串,返回值表示字符串间的字典顺序关系。`strcpy`...
* 对数组初始化要用 static,对指针变量不用。 * 对字符数组赋值,只能对各个元素赋值,不能象下面这样:char str[14];str="I love c!"; * 对指针变量可以,char *str;str="I love c!";注意:此时赋给 str 的不是...
- 对象数组的每个元素都将调用构造函数进行初始化。 - 析构函数会在数组销毁时被调用。 #### 总结 本文详细介绍了 C++ 中数组、指针、函数以及字符串等相关知识点,包括它们的基本概念、使用方法和注意事项。掌握...