int main()
{
int a = 7;
int* c;
char* k;
char l = 'y';
c = &a;
printf("c %p *c %d\n", c, *c);
printf("c %p *c %d\n", c, *c);
c++;
printf("c %p *c %d\n", c, *c);
k = &l;
printf("k %p *k %c\n", k, *k);
k++;
printf("k %p *k %c\n", k, *k);
return 0;
}
解释每一步的意思
%p是什么啊,看不懂。
指针递加代表什么意思?
对不起刚刚我发的程序漏了一步步,我愿追加30分,麻烦你们帮我解释下漏掉的部分:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 7;
int* c;
char* k;
char l = 'y';
c = &a;
printf("c %p *c %d\n", c, *c);
(*c)++;
printf("c %p *c %d\n", c, *c);
c++;
printf("c %p *c %d\n", c, *c);
k = &l;
printf("k %p *k %c\n", k, *k);
k++;
printf("k %p *k %c\n", k, *k);
return 0;
}
经过一番波折,我已经完全理解这个程序的每一步意思,谢谢朋友们,我再加30分再问一个问题
这个程序的目的是什么,哟来解决解决什么问题?
%p是输出指针指向的地址
指针自增表示指针指向当前变量地址的下一个地址
比如 int a[2];
p = a; // 此时p = &a[0]
++p; // 此时p = &a[1]
int main()
{
int a = 7; // a = 7
int* c; // int型指针c
char* k; // char型指针k
char l = 'y'; // l = 'y'
c = &a; // c指向变量a
printf("c %p *c %d\n", c, *c); // 输出c的值以及c指向变量的值,指针的值就是指针所指向变量的地址
printf("c %p *c %d\n", c, *c); // 一样的
c++; // c增加一个位置,指向&a的下一个位置
printf("c %p *c %d\n", c, *c); // 同上
k = &l; // k指向变量l
printf("k %p *k %c\n", k, *k); // 输出k的值以及k指向变量的字符
k++; // k指向&l的下一个位置
printf("k %p *k %c\n", k, *k); // 同上
return 0;
}
我就只说你增加了的部分吧:
printf("c %p *c %d\n", c, *c); // 输出指针c的值(也就是整型变量a的地址),然后输出a的值(7)
(*c)++; // 对指针c解引用得到变量a,然后增加a的值(a=8)
printf("c %p *c %d\n", c, *c); 同上,不过这次a的值是8
c++; // c指向&a后的一个地址(&a+1)
printf("c %p *c %d\n", c, *c); // 同上(不过严格来讲这种做法是不可取的)
这个代码就是示例了一下指针的用法,如何对指针赋值;如何通过指针访问指针引用的变量并修改这个变量的值;以及基本的指针算术(eg: c++,k++),其他没什么用。
不过有几处是需要指出的:
int a = 7;
int* c = &a;
++c; // 这个时候c已经指向了一块非法的内存
printf("c %p *c %d\n", c, *c); // 此时对c解引用(*c)有可能会造成程序崩溃
都帮你写了注释
如果还是有不懂的地方
可以继续问我
int main()
{
int a = 7;//定义一个int型变量为7
int* c;//定义一个int型的指针c
char* k;//定义一个char型的指针k
char l = 'y';//定义一个char l并赋值等于'y'
c = &a;//让指针c指向a的地址 也就是说c指向的内容就是a即*c=a
printf("c %p *c %d\n", c, *c);//%p表示显示指针的值 整个内容就是显示c 这里是c的地址 然后再显示c的内容
printf("c %p *c %d\n", c, *c);//这里同上
c++;//c向前挪动一个单位 再显示 因为我们现在不知道c地址增加一以后指向哪里 所以也就不知道是什么内容
printf("c %p *c %d\n", c, *c);//这句话也验证了我上面说的
//这下面的语句解释也跟上面一样
k = &l;
printf("k %p *k %c\n", k, *k);
k++;
printf("k %p *k %c\n", k, *k);
return 0;
}
这位朋友的这句话
“printf("c %p *c %d\n", c, *c);//%p表示显示指针的值 整个内容就是显示c 这里是c的地址 然后再显示c的内容
”
为什么和上面一位朋友回答的不一样啊,刚好反了?是什么情况啊?
还有这个程序有什么目的啊?