我找到了一个指向数组的指针的例子,这对我来说没有多大意义,我想知道是否有人可以帮助我?

int a[5] = 0,1,4,89,6;
int *p = a;  'p points at the start of a'
p[3] = 1;  'a[3] is now 6'

我不确定第三行p [3] = 1的工作方式以及如何导致a [3] =6。感谢您的提前帮助。

===============>>#1 票数:3 已采纳

这有点不正确。 a[3]1 ,不是6

以下是逐行说明:

int a[5] = 0,1,4,89,6;
int *p = a;  //'p points at the start of a'
p[3] = 1;  //'a[3] is now 1 not 6'

第一行初始化数组。 我认为数字应该有{},但是如果与您一起编译就可以了。 我认为这应该是这样的:

int a[5] = {0,1,4,89,6};

第二行创建指向int p指针,并将其初始化为a的地址。 数组和指针在C中紧密相关,因此,现在,您有2个变量ap指向一个相同的内存地址。

第三行-将p[3]设置为1 ,这一次您将p作为int数组访问(由于数组和指针之间的这种关系,所以可能出现)。 因为pa点在相同的内存地址中,所以这意味着a[3]现在为1

另外,备注不正确,必须为/ * * /或//。

更新

大卫的评论非常重要。

数组是顺序保留的内存,能够存储几个数组值(在您的情况下为5 int)。

指针是一个指针,可以指向可以指向int变量的任何地方:

int a = 5;
int *b = &a;

也可以像您一样指向数组。 在这两种情况下,您都可以使用[],但是如果它指向单个值,则任何大于零的数组下标都是错误的,例如

int a = 5;
int *b = &a;
*b = 4;    // OK.
b[0] = 4; // OK.
b[1] = 4; // compiles correctly, but is **wrong**.
          // it will overwrite something in memory
          // and if program not crash,
          // it will be security hole.

int x[10];
int *y = x;
*y = 4;    // works correctly for y[0], 
           // but makes it difficult to read.
y[0] = 5;  // OK
y[9] = 5;  // OK
y[10] = 5; // compiles correctly, but is **wrong**.
           // it is after last element of x.
           // this is called **buffer overflow**.
           // it will overwrite something in memory
           // and if program not crash,
           // it will be security hole.

更新

我建议您检查这篇文章
http://boredzo.org/pointers/

  ask by Tarius translate from so

未解决问题?本站智能推荐:

10回复

指向数组的指针

我想知道,你能指出一个数组中的一组变量吗? 像这样 所以你可以说...... 和 和*指针的长度 好 让我解释一下我想要完成的事情,也许这会让我有所了解。 我想将一个完整的文件读入一个缓冲区,但我想要一块一块地完成。 将一个小数组传递给read()然后
2回复

指向整数的指针数组

我正在尝试对整数指针数组进行排序(而不是整数数组本身) 但是,当我尝试初始化指向整数数组中整数地址的指针数组时,我的程序崩溃了。 我的程序在res[i] = &(arr[i]);崩溃res[i] = &(arr[i]);
3回复

Memsetting指向数组的指针

我有一个指向数组的指针。 我知道该数组可以容纳多少个项目,但是每个项目的长度是动态的。 那么在这种情况下,如何memset()数组。 我也想为每个项目分配内存。 这个怎么做?
3回复

指向数组中值的指针?

所以我需要在const char数组中有一个指向值的指针。 但是我不能完全没有错误地运行它。 这是代码。 编辑-很抱歉没有提及错误。 问题是,根据放置不同的星号和“&”号的位置,我会遇到很多不同的错误。 没有一个特定的错误。 我得到的最常见的一个说:“从'const char'
1回复

反转指向数组的指针

我有一个指向数组的简单指针,我想反转该数组,这是我写的代码: 如您所见,我使用此功能: 我要获取数组的长度,这是我的小主 这是输出: 现在,我尝试仅打印值,因此在str_reverse的while循环中,我注释了这两行: 这是输出: 那很好! 但
2回复

指向数组的C指针

我有一个大小为240x320字节的数组,指向该缓冲区的指针存储在内存地址0xE30014中。 我试图定义如下: 因为我希望能够以这种方式对数组建立索引: 但是,这引发了一个错误,即数组不是合法的左值。 我想知道当前定义有什么问题吗? 任何帮助深表感谢。
3回复

指向数组的指针的地址

下面是二维数组的示例。 如果我写p = &s[0]; 没有错误。 但如果我写p = s[0]; 有一个错误,即使&s[0]和s[0]将给出相同的地址。 请告诉我为什么会有不同之处,即使两者都给出相同的地址。
5回复

递增指向数组的指针

我在HSW上遇到了这个程序: 我不完全了解循环。 假设内存是字节可寻址的,并且每个整数占用4字节的内存,并且说我们将40字节的内存分配给指针p从地址0到39 。 现在,据我了解,指针p最初包含值0 ,即第一个内存位置的地址。 在循环中,将位移添加到指针以访问后续整数。 我不
3回复

返回指向数组的指针

我编写了一个函数,该函数创建一个数据表,将其元素初始化为0并返回一个指向数据表的指针。 但是,它不起作用。 有人可以向我解释一下,以便我了解我的问题所在。 这是我的代码:
4回复

指向数组结构的指针

我有一个小程序,在编译时会出现以下错误 错误#2168:操作数“ +”具有不兼容的类型“结构议程”和“ INT”。 错误2113:“。”的左操作数。 具有不兼容的类型'int'。 错误#2088:需要左值。 这是我完成的代码 因为它会引发这些错误以及如