没有*的指针打印值数组中的指针

时间:2017-09-27 12:33:36

标签: c arrays string pointers

#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]的情况下取消引用指针*?感谢

2 个答案:

答案 0 :(得分:1)

printf中的

%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); } } ,正如一些程序员所说的那样。