今天遇到一个问题,在C语言中定义了一个指针数组:
char *words[4]={"aaaa","bbbb","ccccc","dddd"}
然后使用words[2]能直接拿出字符串cccc这个值,但是使用*(words[2])
发现拿出来的却是字符c
我的理解是 words[2]里面存储的是指向字符串"cccc"的指针 用words[2]拿出来的是地址,用*(words[i])拿出来的是指针的值,但是发现却完全不是这个情况 ,为什么呢?
这里你要区分清楚指针数组和数组指针的概念。
定义中 char *words[4]={"aaaa","bbbb","ccccc","dddd"}
words是指针数组,分别指向不同字符串。
words[2]是指向"cccc"的指针,但是是数组指针,即"cccc"是字符数组,words[2]指向了第一个字符的。
固*(words[2])取值操作时,得到的是'c'。
这个很好理解,我们来将问题拆分一下,首先是定义个字符串:
char *w = "aaaa";
那么定义完成之后w得到的就应该是a,因为w存储的是字符串的首地址,它的类型是指向字符的指针,表达式w拿到的正是这个地址中存储的字符a。
然后是定义字符串数组:
char *words[] = {"aaaa","bbbb"};
words中存储的其实是一堆指针,这一堆指针组成了一个数组,其中words[0]这个指针正式第一个字符串的收地址,然后(words[0])又回到第一个问题中了,这不就是第一个问题中的w吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。