复习c/c++

gcc test.c -o test
gcc编译c文件的命令


在博客园看到的,转发一下,以后温习

以前学C++的时候,对字符串和指针学的很模糊,现在有时间重新看C,开始还是很模糊,慢慢研究,渐渐有了头绪,决定写下来加深自己的印象。

首先,让我们来看 char shuzu[7];声明的字符串,直接上代码

#include<stdio.h>

int main()

char shuzu[7]="123456";

printf("%x\n",&shuzu);

printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);

return 0;

}

输出如图:

可以看到,输出的三个地址都相同。char shuzu[7]="123456"语句执行的时候,系统就分配了一段长7字节的连续内存,并把这段内存起名为shuzu,里面的值为"123456"

&shuzu,就是shuzu这个变量的内存地址,由于这段内存叫shuzu,所以shuzu的地址也就是这段内存的首地址,也就是'1'字符所在字节的地址;

shuzu,对于数组变量,可以使用变量名来索引变量中的内容,其实这里的shuzu可以理解成数组变量退化的指针,并且指向数组的开头,既然把它理解成指针,那么它的值肯定是地址了,所以他的值和上面的一样。(摘自互联网)

&shuzu[0],比较容易理解,第一个字符串的地址,因此和上面两个是一样的。

 

下面再来看以方法char *shuzu="123456";声明的字符串

#include<stdio.h>

int main()

char *shuzu="123456";

printf("%x\n",&shuzu);

printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);

return 0;

}

输出如图

可以看出 ,第一个和后两个输出有点区别,我们一个一个分析

首先,char *shuzu 是声明一个char类型的指针变量,和数组名称不同,它在内存中有自己的地址

&shuzu :就是取存储指针变量的值,也就是shuzu这个变量在内存中存储的地址

shuzu:存储在指针变量中的值,指向"123456"这个数组的首地址("123456"返回值是一个char类型的指针)。

&shuzu[0]:数组中第一个字符的地址,和数组相同。

 

这里要弄清数组名称和真正指针的区别。

最后来看最让我头疼的 指针数组 

用该表达式声明一个指针数组char *shuzu[]={"1","2"};

代码如下

#include<stdio.h>

int main()



char *shuzu[]={"1","2"};
printf("%x\n",&shuzu);
printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);
return 0;

}

输出如图

其实也很好理解,我们把指针数组看成是普通的数组,数组名称是shuzu,第一个值是shuzu[0],于是,这个数组和char shuzu[7]="123456"声明的数组大概相似了。只是一个数组里存储的char类型的指针,而另一个存储的是char类型的值,这样shuzu、&shuzu、和&shuzu[0]三个输出相同,我们也就明白了。

另外,*shuzu 的值是第一个字符串的地址。和shuzu不同。。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值