今天学习下,为什么指针变量也可以存储字符串,难道不是只存储指针么?
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void main(int argc, char *argv[]) {
int i=3,j=5;
int *p,*q;
p = &i,q=&j;
float a=5.8,b=7.9;
float *c,*d;
c = &a,d = &b;
char m='I',n='l';
char *x,*y;
x=&m,y=&n;
printf("i=%d,j=%d\n",*p,*q);
printf("a=%f,b=%f\n",*c,*d);
printf("m=%c,n=%c\n",*x,*y);
}
![](https://img.haomeiwen.com/i1945114/7a8016964f713d51.png)
代码里面int *p, *q表示的是指针变量,就类似java里面的int a一样。p,q里面保存的都是指针的地址形如0x1111这样的地址。如果我们需要打印数据如这样printf("i=%d,j=%d\n", *p, *q); *p, *q我们可以理解为取地址所指向的内容。
如果你的指针变量是这样的
char buf[]="fadfdsew";
char *p=buf;
p="eqewq";
printf("%d\n",p);
printf("%s",p);
![](https://img.haomeiwen.com/i1945114/d1aa61fc2d6ad35d.png)
像上面这样我的指针变量改变了,变成eqewq。如何理解与我前面所写的 p=0x1111 这样的呢?
int i=3
int *p;
p = &i
大家看到没,我是取i的地址放到p里面,如果我们printf("%d",p),会打印0x1111 ,下面这个我是把"eqewq"放到指针变量里面,它在这里面做了什么工作呢?一共有3件事:
1.申请了空间(在常量区),存放了字符串
2.在字符串尾加上了'/0'
3.返回地址
指针获取的是字符串首字母e的首地址,当用%s输出时,在输出前一个字符的同时指针会自动跳到下个字符的地址处,直到遇到'/0'停止,所以%s可以输出一个字符串.
char buf[]="fadfdsew";
char *p=buf;
p="eqewq";
网友评论