关于指针数组疑惑
char *lines = {"COSC1283/1284",
"Programming",
"Techniques",
"is",
"great fun"
};
printf("lines 0 mem add is %d\n",&lines);
printf("lines 0 add is %d\n",lines);
lines可以理解为是一维数组吧,如上代码,为啥输出内容不一样,下面这种是一样的
char array[] = "abcdef";
printf("array is %p\n",array);
printf("&array is %p\n",&array);
printf("&array is %p\n",&array); 本帖最后由 sunrise085 于 2020-9-23 13:01 编辑
你这俩不一样啊。
上面的是指针,下面的是数组啊
&line是指针line的地址,line是指针line指向的地址,二者是不一样的
看下面的程序,对比一下,指针跳过的字节数是固定的,因为指针大小是固定的,指针指向的地址跳过的字节数是不固定的,因为你的这五个字符串长度不一样
#include<stdio.h>
int main()
{
char *lines = {
"COSC1283/1284",
"Programming",
"Techniques",
"is",
"great fun"
};
for (int i=0;i<5;i++)
{
printf("lines[%d] 指针的地址 is %p\n",i,&lines);
printf("lines[%d] 指针指向的 is %p\n",i,lines);
}
}
而对于第二段程序,
数组的地址就是数组的首地址,也是数组首元素的地址,虽然意义不同,但是地址相同 sunrise085 发表于 2020-9-23 12:58
你这俩不一样啊。
上面的是指针,下面的是数组啊
&line是指针line的地址,line是指针line指 ...
意思我明白了,我在细问一下,您看我理解的对不对:
lines里保存的是"COSC1283/1284"的首字母"C"的地址么? 本帖最后由 sunrise085 于 2020-9-23 13:23 编辑
dysow 发表于 2020-9-23 13:18
意思我明白了,我在细问一下,您看我理解的对不对:
lines里保存的是"COSC1283/1284"的首字母"C"的 ...
是的,line内保存的是第一个字符串的首地址,也是第一个字符串第一个字母的地址
看下图,地址是我编的,你可以只看地址的最后两位,看地址变化量,应该都是8个字节,字符串的地址我懒得写了,只写了四个字节
对照一下你运行的结果
页:
[1]