三、指针数组和数组指针

指针数组

是一个数组,数组里面放的是指针变量,未被赋值的元素值为0

char a =  1;
char b = 2;
char c = 3;
char *p[4] = {&a, &b, &c};
for(int i=0; i<4; i++){
    if(p[i] != 0) {
        printf("%d %d\n", p[i], *p[i]);
    } else {
        printf("%d\n", p[i]);
    }
}

数组指针

是一个指针,指向一个数组

1. 一维数组
	char temp[4] = {1,2,3,4};
	char *p = temp;
	for(int i=0; i<4; i++){
	    // 等效的访问形式
	    printf("%d %d %d %d\n", p[i], *(p+i), temp[i], *(temp+i));
	}
	// 全部指向了第一个元素
	printf("%d %d %d %d\n", p, &p[0], temp, &temp[0]);
	
	2. 多维数组
	char temp[][3] = {1,2,3,4,5,6};
	char (*p)[3] = temp;
	for(int i=0; i<2; i++){
	    // 第i行首地址
	    printf("%d %d %d %d\n", p[i], *(p+i), temp[i], *(temp+i));
	    for(int j=0; j<3; j++){
	             // 等效的访问形式
	        printf("%d %d\n", p[i][j], temp[i][j]);
	    }
	}

字符串指针

char *p[7] = { 'A','B', 'C', 'D', 'E', 'F', 'G' };
char *q = "ABCDEFG";

// 相同点:都在栈用,出了作用域则释放
// 不同点:sizeof§=7, sizeof(q)=8,多了结束标志’\0’

// q指向首字母的地址
printf("%s\n", q);
printf("%c\n", q[0]);
// 注意是指针指向的值加1,还是指针加1
printf("%c\n", *q);
printf("%c\n", *q+1);
printf("%c\n", *(q+1));
printf("%c\n", *q++);
printf("%c\n", *q);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值