首頁>技術>

用指標訪問一維陣列

數組裡面所有的元素是連續的記憶體存放的,陣列名是陣列第一個位元組的記憶體地址,並且陣列名a也表示指標,在表示式可以被轉換為和 p 等價的指標!a作為右值 並不表示a地址儲存的內容, 而是陣列首元素首地址

指標進行加法(減法)運算時,它前進(後退)的步長與它指向的資料型別有關。p指向的資料型別是int ,在記憶體中佔4個位元組(Byte) ,p+1表示前進4個位元組。

用指標訪問二維陣列

先看看常見指標變數的定義:

int a[2][3] = { { 2,3,6 },{ 4,5,8 }};		int(*p)[3] = a;//陣列指標,指向一維陣列的指標,	printf("a=%p &a[0]=%p\n", a, &a[0]);//400	printf("*a=%p  a[0]=%p &a[0][0]=%p\n", *a, a[0],&a[0][0]);//400 一維陣列首元素的首地址	//使用整個陣列的資料沒有實際的含義,編譯器遇到這種情況都會轉換為指向該一維陣列第 0 個元素的指標	printf("(a+1)=%p &a[1]=%p\n", a + 1, &a[1]);//412	printf("*(a+1)=%p a[1]=%p &a[1][0]=%p\n",*(a + 1), a[1], &a[1][0]);// 		printf("*(a+1)+2=%p a[1]+2 = %p &a[1][2]=%p\n",*(a + 1) + 2,a[1] + 2,&a[1][2]);//420	printf("*(*a+1)=%d  *(a[0]+1)=%d  a[0][1]=%d", *(*a + 1), *(a[0] + 1),a[0][1]);//3	

指標進行加法(減法)運算時,它前進(後退)的步長與它指向的資料型別有關

p的資料型別為int (*) [3],一維陣列a[0]有3個整型資料就是12個位元組,a+1 = 412

a[0]的資料型別為int *

一個小練習:打印出字串指標陣列中每一個字元

指標法:字串相當於一個一位陣列

#include<stdio.h>int main(){	char * array[5] = { "array","11","kankanshisha","pointer","c program" };  	char * (*p) = array;//指向陣列元素(char指標型別)的首地址的指標 	for (int i = 0; i < 5; i++)	{		for (int j = 0; '\0' != *(*(p + i) + j); j++) 		{			printf("%c", *(*(p + i) + j));		}		printf("\n");	}	return 0;}

陣列下標法:

#include<stdio.h>int main(){	char * array[5] = { "array","11","kankanshisha","pointer","c program" };	char * (*p)[5] = &array;//指向陣列首地址的指標 (*p)===陣列名字array	for (int i = 0; i < 5; i++)	{		for (int j = 0; (*p)[i][j]!='\0'; j++)		{			printf("%c", (*p)[i][j]);		}		printf("\n");	}	return 0;}

20
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Java面試準備(4)之資料結構與演算法——二叉樹