STM32—c语言指针1
一、指针基础
int a = 1;
int *p = &a;
要打印a : printf("%d\r\n",a);
printf("%d\r\n",*p);
要打印a的地址: printf("%p\r\n",&a);
printf("%p\r\n",p);
要打印p的地址: printf("%p\r\n",&p);
* : 声明(定义)指针 或 取值
& : 取址
二、数组基础:
1、char *str[3] ={“david”,“bp”,“zhendenp”}; (这个叫指针数组) 对的,这种多个字符串的数组只能用char指针数组定义
str[0] 为数组首个元素(“david”)的地址
str[1] 为数组第二个元素(“bp”)的地址
str[2] 为数组第三个元素(“zhendenp”)的地址
注意:不是&str[0],&str[0]是指针str[0]的地址,是指针的地址,不是指针指向的元素的地址。、
*str[0]为数组首个元素(“david”)的首个字母的值,可以理解为二维数组,david是第二层数组。
*str[1]为数组第二个元素(“bp”)的首个字母的值,可以理解为二维数组,bp是第二层数组。
*str[2]为数组第三个元素(“zhendenp”)的首个字母的值,可以理解为二维数组,zhendenp是第二层数组。
2、char str[3] ={“david”,“bp”,“zhendenp”}; 错的,这种多个字符串的数组只能用char指针数组定义
3、char str2[3] = {“daa”}; 对的,这个相当于str2[0]=“d”,str2[1]=“a”,str2[2]=“a”
其中str2和&str2[0]相等。都是数组首个元素(“d”)的地址
4、char str2[3] = {“dava”}; 错的,“dava”为4个字符,大于定义的str2[3]
#include "stm32f10x.h"
#include "bsp_usart.h"
char *str[3] ={"david","bp","zhendenp"};
int i;
int main(void)
{
for(i = 0; i<3;i++){
printf("%s\r\n",str[i]);
}
for(i = 0; i<3;i++){
printf("%c\r\n",*str[i]);
}
}
串口输出:
david
bp
zhendenp
d
b
z