我正在尝试学习C指针,但我无法理解某些东西......以下代码:
#include <stdio.h>
void foo(int *x, int *y);
void foo(int *x, int *y) {
printf("x = %p\ny = %p\n", &x, &y);
*x = 5;
*y = 6;
}
int main(void) {
int a, b;
printf("a = %p\nb = %p\n", &a, &b);
foo(&a, &b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么地址不同?第一个printf(主)输出两个地址.另一个printf(foo)输出不同的地址.我将地址传递给foo(&operator).
可能重复:
c ++警告:局部变量的地址
char* strdup(const char* s)
{
char dup[strlen(s)];
for (int i = 0; i<strlen(s); i++)
{
dup[i]=s[i];
}
return dup;
}
Run Code Online (Sandbox Code Playgroud)
该函数应该保存已向后读取的新数组和另一个插槽.当我编译它时,我收到错误"警告:返回本地变量'dup'的地址",当我运行程序时,它返回内存地址.
我写了以下代码
int num = 3;
int *ptr = #
cout << *ptr << " " << ptr << endl;
Run Code Online (Sandbox Code Playgroud)
并得到以下输出.
3 0x7fff5fbff43c
Run Code Online (Sandbox Code Playgroud)
我想知道这是什么类型的数据.
0x7fff5fbff43c
是吗
一个.签名浮点数据
湾 有符号整数数据
C.无符号浮点数据
d.无符号整数数据
即 签名字符数据
我需要在Windows 7 64位上操作64位地址,我现在正在使用类似的东西
BYTE m_myAddress[8];
Run Code Online (Sandbox Code Playgroud)
但如果我需要添加0x60到地址,它会变得非常棘手.我可以转换它,但我想问一下哪种数据类型最适合这个.
应该使用什么数据类型来存储64位地址?
我有一个类对象的向量.函数随机选择两个元素并返回其地址.
现在使用这两个元素,我想生成同一个类的两个新对象,并使用push_back将它们添加到向量中.
这是两个父元素的地址:
这里没问题.然后生成第一个子对象,并使用vector_pushback将其添加到向量的末尾.问题是,在执行了push_back命令之后,似乎父对象的地址发生了变化.这是push_back之后的调试器状态:
正如您所看到的,地址显然保持不变,但看起来它们指向push_back之后的垃圾值.据我所知,push_back在向量的末尾添加了一个元素.因此,我希望2个元素的地址根本不会改变.
怎么了?
我正在读一本关于装配的书; Jones和Bartlett出版社80x86大会简介
作者给出了练习但没有答案.显然,在进一步发展之前,我想确保我完全理解章节概念.
donc,
对于具有32 MB RAM的PC,"最后"字节的8位十六进制数字地址是多少?
这是我的解决方案:
1)转换为32 MBytes = 268435456位
2)I减去8位以删除最后一个字节268435448
3)转换为十六进制FFFFFF8
所以我得到了FFFFFF8
这看起来不错吗?
我有一个问题,有些人可以帮助我
我目前有这个代码(这些都是全局变量)
int * x;
int * y;
Run Code Online (Sandbox Code Playgroud)
现在,在main方法上我想得到那两个的地址空间,如下所示
int main ( int argc, char *argv[ ] ){
printf("%p\n",x);
printf("%p\n",y);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我得到00000000作为地址空间(好像他们"共享"相同的地址空间)我的问题是1)为什么它的地址空间为0?由于我们正在讨论全局变量,因此它应该采用另一个地址2)当它们应该采用000000和000004时,为什么两个变量在内存中共享相同的空间(假设赋值是正确的)
提前感谢您的回答
在iMac,OsX 10.5上使用gcc 4.0.1版,
一些变量被赋予与二维数组中第二组元素相同的地址.
我该怎么做才能阻止编译器以这种方式分配地址?
包括一个演示问题的程序:
#include <stdio.h>
long a[1][10];
long b;
long c;
int main()
{
printf( "Address of a[0][0]: %p\n", &a[0][0] );
printf( "Address of a[0][1]: %p\n\n", &a[0][1] );
printf( "Address of a[1][0]: %p\n", &a[1][0] );
printf( "Address of a[1][1]: %p\n\n", &a[1][1] );
printf( "Address of b: %p\n", &b );
printf( "Address of c: %p\n\n", &c );
}
Run Code Online (Sandbox Code Playgroud)
Address of a[0][0]: 0x2040
Address of a[0][1]: 0x2044
Address of a[1][0]: 0x2068
Address of a[1][1]: 0x206c
Address of b: …Run Code Online (Sandbox Code Playgroud) 我写了一些代码:
#include <stdlib.h>
#include <stdio.h>
int a_function(int *a, int a_length, int *returned_address)
{
returned_address=a+a_length-1;
return 0;
}
int main(void)
{
int n=5;
int *a;
int *address=NULL;
a=(int*)malloc(n*sizeof(*a));
a_function(a,n,address);
printf("%p",address);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是指针'地址'指向a + 4地址处的内存块.但结果是指针"地址"仍指向NULL(屏幕上的打印结果类似于'00000000').但是,当我开始调试时,在'a_function'中,'returned_address'确实指向了+ 4的内存块.我错过了什么?
我正在探索指针,特别是当前正在搞乱结构指针.目前,我有这个代码:
#include <stdlib.h>
#include <stdio.h>
struct point{
double x;
double y;
};
int main(){
char *pc;
int *pi;
struct point *pp;
//char pointer
printf("%p\n\n", (void*)pc);
pc++;
printf("%p\n\n", (void*)pc);
//int pointer
printf("%p\n\n", (void*)pi);
pi += 2;
printf("%p\n\n", (void*)pi);
//struct pointer
printf("%p\n\n", (void*)pp);
pp -= 3;
printf("%p\n\n", (void*)pp);
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是这样的:
0x104978036
0x104978037
0x7fff5ec4bbc8
0x7fff5ec4bbd0
0x0
0xffffffffffffffd0
Run Code Online (Sandbox Code Playgroud)
据我所知,前4个输出,带char和int指针算法,但我很困惑,为什么它返回0x0的struct指针的内存地址?另外,如果我想double y在内存中说地址,我该如何打印?