#include<stdio.h>
#include<string.h>
int main()
{
char arr[3][10];
char *ptr[3];
strcpy(arr[1],"abcde");
ptr[1]=arr[1];
printf("%s\n",arr[1]);
printf("%p\n", &arr[1]);
printf("%p\n", ptr[1]);
printf("%p\n", &ptr[1]);
printf("%s\n",ptr[1]);
printf("%s\n", *(ptr+1));
return 0;
}
结果
abcde
0x7ffdcbbd8daa
0x7ffdcbbd8daa
0x7ffc30ed1188
abcde
abcde
我知道ptr
是一个指针数组。取消引用指针需要一个一元运算符。为什么我们可以在没有ptr[1]
的情况下取消引用指针*
?感谢
答案 0 :(得分:1)
%s
说明符期望和char *
类型的参数(它应该指向一个以空字符结尾的字符串)。 ptr[1]
属于char *
类型。因此,无需在此处应用解除引用运算符。
答案 1 :(得分:0)
你弄错了。这里:
printf("%s\n", ptr[1]);
%s
需要指向char
。ptr[1]
是char
指针。为什么我使用*(ptr + 1)它打印相同的值?
因为这会应用指针算术,其中涉及ptr
,所以添加1(这里我们指的是int
的大小),然后使用*
运算符和请参考此内存地址(它指向的位置)的内容,该值与ptr[1]
的值相同。
arr[1]
和&arr[1]
可能指向同一位置,但是它们是不同的。 arr[1]
等于&arr[1][0]
char*
类型&arr[1]
。 char (*)[10]
的类型为import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class LineGrph extends Application {
@Override
public void start(Stage stage) {
double LE[] = {23.5,12.0,44.0,12.6,8.5,4.6,53.6}; // this two arrays should pass from another Jframe
double RE[] = {22.5,32.0,40.0,32.6,43.5,23.6,11.6};
stage.setTitle("Line Chart Sample");
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Hz");
yAxis.setLabel("DB");
xAxis.setSide(Side.TOP);
final LineChart<String,Number> lineChart =
new LineChart<String,Number>(xAxis,yAxis);
lineChart.setTitle("Stock Monitoring, 2010");
XYChart.Series series1 = new XYChart.Series();
series1.setName("Portfolio 1");
int count = 125;
for (int i = 0; i<= 6 ; i++)
{
String x = Integer.toString(count);
series1.getData().add(new XYChart.Data(x, LE[i]));
count = count * 2;
}
XYChart.Series series2 = new XYChart.Series();
series2.setName("Portfolio 2");
int count2 = 125;
for (int p = 0; p<= 6 ; p++)
{
String x = Integer.toString(count2);
series2.getData().add(new XYChart.Data(x, RE[p]));
count2 = count2 * 2;
}
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().addAll(series1, series2);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
,正如一些程序员所说的那样。