C語言基礎 -35 指針_指針與一維數組

book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;

	for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++)
		printf("%d ",a[i]);
	printf("\n");
	
	exit(0);
}


book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
1 2 3 
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;

	for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++)
		printf("%p -> %d\n ",&a[i],a[i]);   
	printf("\n");
	
	exit(0);
}

book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffe76e43e6c -> 1
0x7ffe76e43e70 -> 2
0x7ffe76e43e74 -> 3

book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;

	for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++)
		printf("%p -> %d\n ",a+i,a[i]);   // a+i 與&a[i]等效,表示a[i] 的地址
	printf("\n");
	
	exit(0);
}


book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7fffed26c29c -> 1
0x7fffed26c2a0 -> 2
0x7fffed26c2a4 -> 3
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  //*p:指針取值  a是常量

	for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++)
		printf("%p -> %d\n ",p+i,a[i]);
	printf("\n");
	
	exit(0);
}


book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffe3089f9ec -> 1
0x7ffe3089f9f0 -> 2
0x7ffe3089f9f4 -> 3
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  

	for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++)
		printf("%p -> %d\n",p+i,*(p+i));   // p+i 表示地址,指針爲變量; *(p+i)爲指針取值
	printf("\n");
	
	exit(0);
}

book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffca5f2191c -> 1
0x7ffca5f21920 -> 2
0x7ffca5f21924 -> 3

book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)   //a是常量,代表數值第一個地址;
                                                   //*a = *(a+0), 地址取值,代表a[0]
		printf("%p -> %d\n",p+i,*(p+i));
	printf("\n");
	
	exit(0);
}

book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffd7fe76c5c -> 1
0x7ffd7fe76c60 -> 2
0x7ffd7fe76c64 -> 3
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  

	a++;    //a是數組常量,不可用出現在等號左邊,不可被賦值,否則後面編譯會不通過

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		printf("%p -> %d\n",p+i,*(p+i));
	printf("\n");
	
	exit(0);
}


book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
arr.c: In function ‘main’:
arr.c:10:3: error: lvalue required as increment operand
  a++;
   ^~
<builtin>: recipe for target 'arr' failed
make: *** [arr] Error 1
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  

	p++;   //地址自增1

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		printf("%p -> %d\n",p+i,*(p+i));
	printf("\n");
	
	exit(0);
}


book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffe3fc586d0 -> 2                      //輸出從第2位元素開始
0x7ffe3fc586d4 -> 3
0x7ffe3fc586d8 -> -1548574976            //最後一位元素由於爲賦值,故返回隨機數
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3] = {1,2,3};
	int i;
	int *p = a;  

	p++;

	printf("%p,%p\n",a,a+1);
	printf("%p,%p\n",p,p+1);

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		printf("%p -> %d\n",a+i,*(a+i));
	printf("\n");
	
	exit(0);
}

book@100ask:~/C_coding/CH01$ ./arr
0x7ffd80569bcc,0x7ffd80569bd0
0x7ffd80569bd0,0x7ffd80569bd4
0x7ffd80569bcc -> 1
0x7ffd80569bd0 -> 2
0x7ffd80569bd4 -> 3
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3];
	int i;
	int *p = a;  

	p++;

	printf("%p,%p\n",a,a+1);
	printf("%p,%p\n",p,p+1);

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		printf("%p -> %d\n",a+i,*(a+i));
	printf("\n");
	
	exit(0);
}

book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
0x7ffd16ea71ac,0x7ffd16ea71b0
0x7ffd16ea71b0,0x7ffd16ea71b4
0x7ffd16ea71ac -> 22092
0x7ffd16ea71b0 -> 384463520   //由於未賦初值,此處隨機輸出
0x7ffd16ea71b4 -> 32765
book@100ask:~/C_coding/CH01$ cat arr.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a[3];
	int i;
	int *p = a;  

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		scanf("%d",&a[i]);

	for(i = 0 ; i < sizeof(a)/sizeof(*a); i++)
		printf("%p -> %d\n",a+i,*(a+i));
	printf("\n");
	
	exit(0);
}
book@100ask:~/C_coding/CH01$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH01$ ./arr
1
2
3
0x7fff74ff6a5c -> 1
0x7fff74ff6a60 -> 2
0x7fff74ff6a64 -> 3

 

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