Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串上指针的C数组_C_Arrays_Pointers - Fatal编程技术网

字符串上指针的C数组

字符串上指针的C数组,c,arrays,pointers,C,Arrays,Pointers,嗯,我不经常使用指针,但现在我感到困惑。我正在尝试在字符串处创建指针数组(在本例中只有两个指针) charstr[120]; char*st[2]; int i=1; while(fgets(str,120,f)){ printf(“%s”,str); st[i]=&str; i++; 如果(i==3) 打破 } 对于(i=1;i数组,始终使用基于0的索引 例如: int my_arr[] = { 10, 11, 12, 13, 14, 15 }; 意味着数组my_arr有6个元素,从索引0到

嗯,我不经常使用指针,但现在我感到困惑。我正在尝试在字符串处创建指针数组(在本例中只有两个指针)

charstr[120];
char*st[2];
int i=1;
while(fgets(str,120,f)){
printf(“%s”,str);
st[i]=&str;
i++;
如果(i==3)
打破
}

对于(i=1;i数组,始终使用基于0的索引

例如:

int my_arr[] = { 10, 11, 12, 13, 14, 15 };
意味着数组my_arr有6个元素,从索引0到6-1(5)。因此,一个N元素数组的索引从0到N-1。另外,请注意,my_arr本身也是指向数组的指针

定义整型指针:

int *iPtr = my_arr; // note that we do not use &my_arr here. my_arr is already a pointer to the array it defined.

它们是一样的

在图中,框代表值,它们的地址写在框的旁边

当您使用变量
i
作为索引遍历数组时,基本上可以间接执行以下操作:

i = 0
my_arr[i]

my_arr[0]

*(my_arr + 0) 
与相同(替换名为my_arr的框的值)

*运算符获取本例中地址
0x20014000
处的值,即
10

上述操作也与

iPtr[0] or *(iPtr+0)
查看名为
iPtr
的框,它也包含相同的值
0x20014000

现在让我们定义一个指针数组:

int *myptr_arr[3];
int varA = 25;
int varB = 34;
int varC = 67;

myptr_arr[0] = &varA; // note that varA is not a pointer, to get its address use &
myptr_arr[1] = &varB; // note that varB is not a pointer, to get its address use &
myptr_arr[2] = &varC; // note that varC is not a pointer, to get its address use &

同样,当您编写
myptr\u arr[0]
时,它会转换为

*(myptr_arr + 0)

*(20152000 + 0)
这将获得
0x20162000
,即名为
[0]
的框的值=
varA
的地址。现在要获得此地址的值,需要使用
*
运算符取消对其的引用

*myptr_arr[0]
这与
*(*(myptr\u arr+0))相同
与
*(0x20162000)
这是box
varA


请参阅:

数组始终使用基于0的索引

例如:

int my_arr[] = { 10, 11, 12, 13, 14, 15 };
意味着数组my_arr有6个元素,从索引0到6-1(5)。因此,一个N元素数组的索引从0到N-1。另外,请注意,my_arr本身也是指向数组的指针

定义整型指针:

int *iPtr = my_arr; // note that we do not use &my_arr here. my_arr is already a pointer to the array it defined.

它们是一样的

在图中,框代表值,它们的地址写在框的旁边

当您使用变量
i
作为索引遍历数组时,基本上可以间接执行以下操作:

i = 0
my_arr[i]

my_arr[0]

*(my_arr + 0) 
与相同(替换名为my_arr的框的值)

*运算符获取本例中地址
0x20014000
处的值,即
10

上述操作也与

iPtr[0] or *(iPtr+0)
查看名为
iPtr
的框,它也包含相同的值
0x20014000

现在让我们定义一个指针数组:

int *myptr_arr[3];
int varA = 25;
int varB = 34;
int varC = 67;

myptr_arr[0] = &varA; // note that varA is not a pointer, to get its address use &
myptr_arr[1] = &varB; // note that varB is not a pointer, to get its address use &
myptr_arr[2] = &varC; // note that varC is not a pointer, to get its address use &

同样,当您编写
myptr\u arr[0]
时,它会转换为

*(myptr_arr + 0)

*(20152000 + 0)
这将获得
0x20162000
,即名为
[0]
的框的值=
varA
的地址。现在要获得此地址的值,需要使用
*
运算符取消对其的引用

*myptr_arr[0]
这与
*(*(myptr\u arr+0))相同
与
*(0x20162000)
这是box
varA


请参阅:

st[i]
是一个
char*
,或者是一个字符的指针。
&str
是一个
char(*)[120]
,或者是一个120个字符的数组的指针。注意它们是不同的。所以我需要将&str更改为str,当我这样做时,我得到了这个:12 1211��!�� ��!��
inti=0;
st[i]=strdup(str);
if(i==2)
for(i=0;第二件事是使用
st[1]
st[2]
st[1]
是st
st[2]中的第二个元素
是st中的第三个元素,它有两个元素长,因此没有第三个元素。@immibis现在我知道了,索引对指针指向器非常重要,这很有趣。如果你能写一个关于指针数组如何工作的答案就好了
st[i]
是一个
char*
,或者是一个字符指针。
&str
是一个
char(*)[120]
,或者是一个120个字符数组的指针。注意它们是不同的。所以我需要将&str更改为str,当我这样做时,我得到了这个:12 1211��!�� ��!��
inti=0;
st[i]=strdup(str);
if(i==2)
for(i=0;第二件事是使用
st[1]
st[2]
st[1]
是st
st[2]中的第二个元素
是st中的第三个元素,它有两个元素长,因此没有第三个元素。@immibis现在我知道了,索引对pointeer非常重要,这很有趣。如果你能写一个关于指针数组如何工作的答案就好了