gpt4 book ai didi

c++ - 请求解释数组中指针的行为

转载 作者:行者123 更新时间:2023-11-27 22:43:02 25 4
gpt4 key购买 nike

我正在使用 rextester(在线编译器)运行它。我按照教程进行操作,但有些地方我不明白。

我认为将我的问题直接写在代码中会更好。

//gcc 5.4.0

#include <stdint.h>
#include <stdio.h>

uint8_t var1 = 17;
uint8_t var2 = 23;
uint8_t arr[] ={7,9,11};

uint64_t *ptr1;//pointer
uint64_t *ptr2;
uint64_t *ptr3;

int main(void)
{

printf("var1: %d\n", var1) ;

//connecting pointer to address
ptr1 = &var1;
printf("address of ptr1: %d\n", ptr1) ;
printf("value of ptr1: %d\n\n", *ptr1) ;

//connecting pointer to address + 1
ptr2 = &var1 +1;
printf("address of ptr2: %d\n", ptr2) ;

//assign value to pointer
*ptr2 = var2;
printf("value of ptr2: %d\n\n", *ptr2) ;

//try on array
ptr3= &arr;//no need to point element 0, or yes?
printf("address of ptr3: %d\n", ptr3) ;
printf("value of ptr3: %d\n\n", *ptr3) ;//i expect 7
return 0;
}

如果能帮助我理解 c 和 cpp 中指针的正确行为,我将不胜感激我做了很多尝试,但我无法将指针链接到数组

在 mato 响应后编辑:

您认为这是一种处理指针和数组的简洁方法吗?或者有更好的解决方案来处理不覆盖内存?

//gcc 5.4.0

#include <stdint.h>
#include <stdio.h>

uint16_t var = 17;
uint16_t arr[] ={3,5,7,11,13};
uint16_t *ptr;

int main(void)
{

printf("var: %d\n", var) ;

//connecting pointer to address
ptr = &var;
printf("address of ptr: %d\n", ptr) ;
printf("value of ptr: %d\n\n", *ptr) ;

//try on array
for (uint16_t n =0;n<5;n++){
ptr= &arr[n] ;
printf("item: %d value: %d ads: %d pointer: %d\n", n, arr[n], ptr, *ptr) ;
}
return 0;
}

最佳答案

看来您确实了解指针是什么,并且可以将它们与基本类型一起使用。

您的代码中有两个问题。首先是这部分:

//connecting pointer to address + 1
ptr2 = &var1 + 1;

在这里,您将一些地址分配给变量 ptr2。到目前为止,这还没有什么危险。

然后你给那个地址的内存赋值

//assign value to pointer
*ptr2 = var2;

这很危险,因为作为开发人员,您不知道该地址存储了什么。即使您现在很幸运,并且那部分内存没有被用于其他任何事情,一旦您的程序变长,它很可能会发生变化,然后您将很难找到错误。

现在数组通常有点困惑,因为当你像这样创建一个数组时:

uint8_t arr[] = {7,9,11};

发生了三件事。

  1. 您的程序分配连续的内存块,适合 3 个 uint8_t 类型的变量。此上下文中的 3 个变量称为元素。
  2. 元素将获得提供的初始值 7、9 和 11。
  3. 第一个元素(包含值 7 的那个)的地址将存储在 arr 中。

所以 arr 实际上是 uint8_t * 类型。

为了让最后一部分做你期望的,你只需要改变这一行(删除 &):

ptr3 = arr;

编辑:顺便说一句,观察并理解 this course你将成为 C 内存操作方面的专家。视频有点过时,但相信我,这家伙很棒。

EDIT2:我刚刚意识到另一个 answer绝对正确,您确实需要匹配类型。

关于c++ - 请求解释数组中指针的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com