当我运行此代码时:
if(isset($_POST['jmeno']) && strlen($_POST['textarea']) > 0){
echo "dokončeno";
}
输出:2 2
接下来我使用二维数组来解决同样的问题,但它给了我错误。
#include<stdio.h>
int main()
{
int a[2]={1,2};
printf("%d \t %d",*(a+1),a[1]);
}
我的想法是指向(a + 1)的地址并打印其内容。但是它给出了错误的格式错误。但是当我指向*(a + 1)时,即当我使用*(*(a + 1))时,它正在打印内容。
为什么程序在指向(a + 1)时不打印内容?指向1-D阵列和2-D阵列有什么区别?
答案 0 :(得分:2)
当我运行此代码时[...]它输出:2 2
这是因为表达式*(a+1)
和a[1]
是相同的:C中的方括号表达式通过将它们的操作数添加在一起(即在您的情况下为a
和1
)和然后取消引用结果。
我使用二维数组来解决同样的问题,但它给了我错误。
这是因为*(a+1)
与a
的元素属于同一类型。当a
是int
的1D数组时,其元素为int
s。当a
是int
的二维数组时,其元素是int
的一维数组。在第二个示例中,您尝试将int
的一维数组传递给printf
,格式说明符需要单个int
,这会导致错误。
我的想法是指出(a + 1)的地址并打印其内容。
然后你需要再添加一个解除引用级别(即一个星号)到#34; counter&#34; 1D阵列:
printf("%d \t %d",**(a+1),a[1][0]);
// ^
获取a[1][1]
的表达式稍微复杂一些:
printf("%d \t %d",*(*(a+1)+1),a[1][1]);
答案 1 :(得分:1)
2D数组实现为数组数组;因此,在第二种情况下,您尝试printf
指针(a[1]
,而非a[1][0]
)。如果取消引用该指针,它将起作用:
printf("%d \t %d", **(a + 1), a[1][0]);