4m4*_*3u5 2 c++ arrays pointers char
我正在尝试理解C ++中的指针,但目前对以下内容感到困惑:
char input_line[] = "hi?";
char* p;
p = &input_line;
while (*p)
{
cout << *p << endl;
*p++;
}
Run Code Online (Sandbox Code Playgroud)
我必须在这里混淆,因为我认为这表示分配的地址一维数组的指针 ; 但是,当我尝试编译它时,出现错误: error: cannot convert char (*)[4]' to 'char*' in assignment p = &input_line;
看来我应该这样做:
const char input[] = "test?";
int quest_count = 0;
const char *i = input;
while(*i){
cout << *i << endl;
*i++;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说没有任何意义,因为您正在为存储地址的指针分配一个char 数组。char
这行代码中的错误:
Run Code Online (Sandbox Code Playgroud)p = &input_line;可以通过更改来解决:
Run Code Online (Sandbox Code Playgroud)p = input_line;那是因为您正在分配数组的内存方向。它的值是一个指向char指针的指针。这就是引发错误的原因。请记住,运算符
&会为您提供变量的存储方向。
甲指针存储对象的内存方向。一个阵列是由某些类型的存在于在存储器中保留的空间量consecutives一个对象的序列。
数组的每个索引都是一个由0到9的数字组成的数字。数组的每个元素都是可以获取其地址的对象,例如指向对象存储位置的指针。在阵列中,对象位于连续的存储位置中。当您分配一个数组的指针,你分配的指针数组第一个元素,它的array[0]。
当指针值增加1时,指针将指向内存位置中的下一个对象。因此,数组和指针具有相似的行为。如果为指针分配一个数组,然后将指针值加1,则它现在将指向数组中的对象。
这不仅适用于char类型,而且适用于C ++中的每种类型。在此页面中,您可以获得有关指针和数组的更多信息。您必须注意,指针和数组必须包含或指向相同的变量类型。
这是此页面上的示例:
Run Code Online (Sandbox Code Playgroud)int* ptr; int a[5]; ptr = &a[2]; // &a[2] is the address of third element of a[5].
此页面中的示例的输出示例是:
使用数组显示地址:
Run Code Online (Sandbox Code Playgroud)&arr[0] = 0x7fff5fbff880 &arr[1] = 0x7fff5fbff884 &arr[2] = 0x7fff5fbff888 &arr[3] = 0x7fff5fbff88c &arr[4] = 0x7fff5fbff890使用指针显示地址:
Run Code Online (Sandbox Code Playgroud)ptr + 0 = 0x7fff5fbff880 ptr + 1 = 0x7fff5fbff884 ptr + 2 = 0x7fff5fbff888 ptr + 3 = 0x7fff5fbff88c ptr + 4 = 0x7fff5fbff890
正如您在输出示例中注意到的那样,两者都指向相同的内存位置,因此您可以从这两种方法中访问对象。
正式地,在C ++ 11标准中提到:
数组到指针的转换:
可以将类型为“
arrayofNT”或“array边界未知”的左值或右值T转换为“指向”的指针的前值T。结果是一个指向的第一个元素的指针array。
您可以查看这些页面以获取有关此主题的更多信息:
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |