發現一個很有意思的C語言指針小知識

先貼代碼給你們湊乎湊乎!!!!!!!!!!!!!!!!!!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void test()
{
	int *p = NULL;
	int n, i;
	printf("請輸入整數n(n<=40):");
	scanf("%d", &n);
	p = (int *)malloc(n * sizeof(int));
	if (p == NULL)
	{
		printf("No enough memory! \n");
		exit(0);
	}
	for (i = 0; i < n; i++)
		p[i] = i;

	for (i = 0; i < n; i++)
		printf("%d \n", p[i] );

	free(p);
	_getch();
}

void test1()
{
	int a[] = {1 , 2 , 3 , 4 , 5};
	int n, i;
	int * p;
	p = a;

	for (i = 0; i < 5; i++)
		printf("%d \n", p[i]);


	_getch();
}

void test2()
{
	float a[] = { 100 , 200 , 300 , 400 , 500 };
	float * p[] = { &a[0] , &a[1] , &a[2]  ,&a[3] ,&a[4] };
	int i;
	for (i = 0; i < 5; i++)
	{
		printf("%f \n", p[i] );
	}
	_getch();
}

int main()
{
	test();
	printf("======================= \n");
	test1();
	printf("=======================\n");
	test2();
	printf("=======================\n");
	_getch();
	return 0;
}

以上代碼 , test 和test1 中 , 使用指針都是p[i]就可以調用元素 . 但在test2中如果用p[i]去調用元素 , 也不會報錯 ,  但是會顯示元素結果都爲000.00000 , 我很差異 .

我去進行調試 , 查看內存變量 , 發現也正常 , 

 

對於爲什麼test2欄中 , 使用 p[i] 進行調用元素 , 會在控制檯顯示出0.00000 , 我目前也不知道 ,  就算P中存入的是a的地址 , 不也應該顯示a的地址嘛??????

 

當我在test2 中使用    * p[i] 進行元素調用 , 纔會顯示正常的數值.

 

 

這顯示0.0000的結果是怎麼一回事? 有沒有很懂指針的大神 , 出來幫我解釋下?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章