今天在看apue的时候突然对一段代码有了兴趣,我把他贴出来。
#include <stdio.h>
#include <fcnl.h>
int main(int argc,char *argv[])
{
if(open(argv[1],O_RDONLY)<0)
{
printf("open error for %s,argv[1]");
}
return 0;
}
一直在数组和指针上面有点疑惑,这个char *argv[]到底是什么?自己分析了半天无果,于是腆着脸问群里兄弟。一句“ 你还不系统的去学习下。。会被超车的哦。。”戳中了我的泪点,于是我就泪流满面了,也就引发了我对 char* aa[] 和char (*bb) []的疑问。
char *aa[5],*的优先级低于[],aa就是指向含有5个char元素数组的指针,hh的本质是指针。char (*bb) [5],bb先和*结合。bb是一个数组,数组中有5个元素,每个元素都是一个指针,指针指向char数据。
现在我来定义一个数组,char cc[5];
aa=cc;这句话对吗?cc也是一个指针啊?不对?
这句话是不对的,cc是一个指针,指向cc[5]数组的第一个元素。而aa是指向含有5个char元素数组的指针。数据类型不一样,正确的写法应该是 aa=&cc;
对cc去地址就是获取数组的地址。
#include <stdio.h>
#include <fcnl.h>
int main(int argc,char *argv[])
{
if(open(argv[1],O_RDONLY)<0)
{
printf("open error for %s,argv[1]");
}
return 0;
}
一直在数组和指针上面有点疑惑,这个char *argv[]到底是什么?自己分析了半天无果,于是腆着脸问群里兄弟。一句“ 你还不系统的去学习下。。会被超车的哦。。”戳中了我的泪点,于是我就泪流满面了,也就引发了我对 char* aa[] 和char (*bb) []的疑问。
char *aa[5],*的优先级低于[],aa就是指向含有5个char元素数组的指针,hh的本质是指针。char (*bb) [5],bb先和*结合。bb是一个数组,数组中有5个元素,每个元素都是一个指针,指针指向char数据。
现在我来定义一个数组,char cc[5];
aa=cc;这句话对吗?cc也是一个指针啊?不对?
这句话是不对的,cc是一个指针,指向cc[5]数组的第一个元素。而aa是指向含有5个char元素数组的指针。数据类型不一样,正确的写法应该是 aa=&cc;
对cc去地址就是获取数组的地址。