创建变量时,例如:
int x = 5;
它会存储在内存中的某个地方,很酷。
但是,当我通过执行以下操作更改变量的值时:
x = 10;
内存中发生了什么?
x的新值是否会覆盖使用相同内存地址的旧值?
或者新值被存储在新的内存地址中,然后旧地址被删除?
当我遇到指针时,这个问题就出现了。似乎使用指针更改变量的值与使用另一个值定义变量是相同的。
这是我的代码(大部分是注释(lol)):
#include "iostream"
int main()
{
int x = 5; // declaring and defining x to be 5
int *xPoi
很难分辨星号与指针的关系。
下面是一些让我感到困惑的代码示例。
typedef struct X { int i_; double d_; } X;
X x;
X* p = &x;
p->d_ = 3.14159; // dereference and access data member x.d_
(*p).d_ *= -1; // another equivalent notation for accessing x.d_
在第五行,我们有(*p).d_ *= -1;。为什么有两个星号?他们的位置意味着什么?
int x = 2;
int* p_x = &x;
我正在尝试编写一个程序,它从文件中读取字母"A,B,C,D,E“,记录这些字符的所有实例,并忽略大于号和小于号之间的任何字符,"< and >”。尽管文件似乎已经正确打开,但位于findCommonAnswers()中的for循环似乎访问了受保护或不存在的值。Windows提供了异常代码c0000005,而GNU调试器告诉我"A Heap block at 0xXXXXX has modified at 0xXXXXX+1 past request size of 6“。数字6在每次调试中都是恒定的。代码的当前输出是"-1.#IND",在以前
为什么在此代码编译器中不显示错误Use of unassigned local variable时,获取该变量的地址?
int i;
int* p = &i; // Use of unassigned local variable i ?
int j = *p; // j = 0
j = i; // both valid
这将很好地编译,j的值将为0。
在下面的示例中,'ptr‘指向常量变量'local’。为什么通过赋值'*ptr‘来修改'local’而不改变'local‘的值?
#include <stdio.h>
int main(void)
{
const int local = 10;
int *ptr = (int*) &local;
printf("address of local: %p \n", &local);
printf("value of ptr: %p \n", ptr);
p
我在这里读过很多关于指针和数组等价性的文章和问题。几乎每篇文章都有不同的解释。我知道数组和指针是紧密相关的,下面是我对指针和数组等价性的实验,包括解释给定行为的注释(如果我哪里错了,请随时纠正我)。我的问题是:数组只是常量指针,还是还有其他区别?
#include <stdio.h>
int main ()
{
// declaring array this way in fact declares a pointer with name "a" which points to the first element in the array:
int a[]
问题 嗨,我有这个函数来检查当前路径,并返回路径中的char指针。但是当我使用GCC进行编译时,它会返回这两个警告。我试过一些解决方案,但是我不能解决它。 该如何处理此警告? 警告 In file included from C:\Users\Lsy\Documents\C\murtza_debug\main.c:10:0:
C:\Users\Lsy\Documents\C\murtza_debug\system/path.h:6:10: warning: initialization from incompatible pointer type [-Wincompatible-pointe
int f1(){}
int* f2(){}
int main()
{
int *a;//1
int b;
int *c;
a=c;
a=&b;
int (*p)(); //2
p=f2; //showing error
p=&f1;
}
我期望在我的程序中'2‘的行为必须类似于'1’。为什么函数指针的行为不同。还是我错过了什么?
在一次面试中,他们问了我这个问题。
#include<stdio.h>
int main ()
{
int* const p=NULL;
int const *q=NULL;
p++;
q++;
printf("%d\n",p);
printf("%d\n",q);
}
上面的程序将如何运行
a) p将增加4个字节;
Q也会递增4个字节;
b) p将为零
q will point to memory 4 bytes ahead;
c)以上程序会出现错误
我不能理解这两个陈述之间的区别
int* const p=NULL;
int const *q
在这段代码中,依赖于gdb,当NULL被赋值时,p从0x602010更改为0x0 (正如我所期望的)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 10;
// gdb output
int *p = (int *) malloc(sizeof(int)); // p = (int *) 0x602010
p = NULL; // p = (int *) 0x0
p = &a;
我只是在学习关键字new和delete的指针和动态内存分配。
下面是我的C++代码,用来测试我的理解。
#include <iostream>
using namespace std;
int main() {
// Variable to be pointed to by a pointer
cout << "Create a double variable" << endl;
double n = 3.1415926;
cout << "n = " << n &l