Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的指针操作_C_Pointers - Fatal编程技术网

c语言中的指针操作

c语言中的指针操作,c,pointers,C,Pointers,我对指针操纵有怀疑 main() { int x=10; // extra line added... char *p=x; printf("%d", &p) printf("%d", &p[0]); printf("%d" , &p[1]); } 此代码提供输出 地址:10。。 10 十一, 最后两个输出是如何实现的。。有人能给我解释一下吗 代码已更改 char *p=10; 代码目前具有未定义的行为。指针p未指向任何有效的内存位

我对指针操纵有怀疑

main()
{   int x=10;  // extra line added...
   char *p=x;

   printf("%d", &p)

   printf("%d", &p[0]);
   printf("%d" , &p[1]);
}
此代码提供输出

地址:10。。 10 十一,

最后两个输出是如何实现的。。有人能给我解释一下吗

代码已更改

char *p=10; 
代码目前具有未定义的行为。指针
p
未指向任何有效的内存位置以在该位置初始化10

char a = 10;
char *p = &a;
也就是说,
p
和p[0]
都产生相同的内存位置

char a = 10;
char *p = &a;
代码目前具有未定义的行为。指针
p
未指向任何有效的内存位置以在该位置初始化10

char a = 10;
char *p = &a;

话虽如此,
p
&p[0]
都会产生相同的内存位置。

这是未定义的行为。
char a = 10;
char *p = &a;
指针需要指向某个有效的对象,然后才能将某个值添加到该位置

char a = 10;
char *p = &a;

这是未定义的行为。
指针需要指向某个有效的对象,然后才能将某个值添加到该位置

char a = 10;
char *p = &a;

p
&p[0]
将计算到相同的地址(数组第一个元素的地址),即10

因此
&p[0]
将被评估为
10
&p[1]
&p[0]+sizeof(char)
,即11

但是,当您取消引用p(
*p
)时,代码很可能会出错

以下代码将始终打印
True

main()
{  
    int* p; 
    printf("%s\n",p == &p[0] ? "True" : "False");
}

p
&p[0]
将计算到相同的地址(数组第一个元素的地址),即10

因此
&p[0]
将被评估为
10
&p[1]
&p[0]+sizeof(char)
,即11

但是,当您取消引用p(
*p
)时,代码很可能会出错

以下代码将始终打印
True

main()
{  
    int* p; 
    printf("%s\n",p == &p[0] ? "True" : "False");
}

代码中的一些错误:

int x = 10;
char * p = &x; // error  1 - you was assigning int to pointer

printf("%p\n", &p); //  error 2 - you printing address of pointer (char **), 
                    //  so different format string is needed
printf("%p\n",  &p[0]);  // same error 2 - printing address of first byte in int x
printf("%p\n" , &p[1]);  // same error 2 - printing address of second byte in int x

代码中的一些错误:

int x = 10;
char * p = &x; // error  1 - you was assigning int to pointer

printf("%p\n", &p); //  error 2 - you printing address of pointer (char **), 
                    //  so different format string is needed
printf("%p\n",  &p[0]);  // same error 2 - printing address of first byte in int x
printf("%p\n" , &p[1]);  // same error 2 - printing address of second byte in int x

将解释两种情况:

场景1:
char*p=x
x==10
p
是用10(用户程序无法访问的地址)初始化的字符指针:
p==10

p
(即,
*p
)的值将导致分段错误(内存引用无效)

p[0]==*(p+0)
&p[0]==(p+0)==p
,即10

因此,
printf(“%p”和&p[0])
将为您提供10

p[1]==*(p+1)
&p[1]==(p+1)

因为,
p
是一个字符指针,它通过
sizeof(char)
获得增量,即1

因此,
printf(“%p”,&p[1])
将为您提供10+1=11

场景2:
char*p=&x
这里的
p
是一个指向整数
x

x的值
=10

x
=1000的地址(假设)

因此
p
=1000

p[0]==*(p+0)
&p[0]==(p+0)==p

因此,
printf(“%p”和&p[0])
将为您提供1000

p[1]==*(p+1)
&p[1]==(p+1)

因为,
p
是一个字符指针,它通过
sizeof(char)
获得增量,即1


ie
&p[1]==1000+1==1001

将解释两种情况:

   printf("%d", &p[0]);
   printf("%d" , &p[1]);
场景1:
char*p=x
x==10
p
是用10(用户程序无法访问的地址)初始化的字符指针:
p==10

p
(即,
*p
)的值将导致分段错误(内存引用无效)

p[0]==*(p+0)
&p[0]==(p+0)==p
,即10

因此,
printf(“%p”和&p[0])
将为您提供10

p[1]==*(p+1)
&p[1]==(p+1)

因为,
p
是一个字符指针,它通过
sizeof(char)
获得增量,即1

因此,
printf(“%p”,&p[1])
将为您提供10+1=11

场景2:
char*p=&x
这里的
p
是一个指向整数
x

x的值
=10

x
=1000的地址(假设)

因此
p
=1000

p[0]==*(p+0)
&p[0]==(p+0)==p

因此,
printf(“%p”和&p[0])
将为您提供1000

p[1]==*(p+1)
&p[1]==(p+1)

因为,
p
是一个字符指针,它通过
sizeof(char)
获得增量,即1

ie
&p[1]==1000+1==1001

   printf("%d", &p[0]);
   printf("%d" , &p[1]);
它将打印出p指向的地址。。 因为char*p=x;而x=10

然后,,&p[0]=10,&p[1]=11&p[2]=12,依此类推

   printf("%d", &p);
我对此不太确定,但我知道它会打印出内存10中包含的值,在我的情况下=10000

   printf("%d", p);
它将打印出10,即*p值

cmiiw

它将打印出p指向的地址。。 因为char*p=x;而x=10

然后,,&p[0]=10,&p[1]=11&p[2]=12,依此类推

   printf("%d", &p);
我对此不太确定,但我知道它会打印出内存10中包含的值,在我的情况下=10000

   printf("%d", p);
它将打印出10,即*p值


cmiiw

上面没有存储p指向的任何内容,它初始化p。当说“初始化p”时,初始化的值是多少?我不确定我抓到你了。请解释。初始化值为10。这可能是一个毫无意义的指针,但就这样吧!伙计们,我已经改变了密码…现在告诉我品脱这种行为的原因&p和p[0]上面没有存储p指向的任何内容,它初始化p。当说“初始化p”时,初始化的值是多少?我不确定我抓到你了。请解释。初始化值为10。这可能是一个毫无意义的指针,但就这样吧!伙计们,我已经改变了密码…现在告诉我真相