C语言关于指针的基础知识

问题1、
int *abc;
我定义了一个指针.
请问 abc = 100 ;
这个是什么意思。

问题二:
abc 和*abc 不同之处在哪

然后
char input[257], *abc;
*(abc = gets(input));

这2句又是什么意思。

1、把100的地址赋值给abc指针,后面你是temp=*abc时,实际是取了内存地址为100的数据
2、abc表示内存的地址,*abc表示该地址下内存数据。如abc=1234,那么*abc就去内存地址为1234处取数据内容。
3、gets(input),先把内容放在input[]数组中,数组名代码数组在内存中的地址,数组的地址设为1234,则abc = gets(input)相当于把1234赋值给abc,然后再*abc代表要去1234地址取内容
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-01
你的说法有错误。看例子吧。char * a[]={"china", "usa", "russia"};
C语言没有字符串类型。a是一个字符指针数组。把3个字符串放到常量区,返回它们的地址,放到数组中。数组名被编译成指向首元素的地址常量。
a指向元素a[0]。而a[0]是char *型的,所以a是char **型的。相似地,命令行参数argv常常被写成char * argv[],当然也可以写成char * * argv。(数组名作为形参,其实是指针变量。argv的值可以改变,当然这一般没有意义,除了你想抛掉argv[0]那个程序名参数。)

由于a代表了数组,所以&a的类型是char * (*)[3]型。这种类型是指向数组的指针,指向的数组中应该有3个元素,每个元素又是char *型。

至于char * p = a+1; 和 char p; p=a+1;
等号左右两边类型肯定不匹配,编译时会有警告。也许你是写错了。
也许你说的a,是字符数组,而非字符串的数组。
char a[]={"china"};
那么char * p = a+1;是对的。a是char *型。指向首元素'c'。

char p; p=a+1;是错的。等号两边类型不一致。警告而已,毕竟字符和地址都是数值。
以上回答你满意么?
相似回答