char* s = "hello world!"是字符串吗?
之前我们有说过
int a[12]其实是一种 const 指针
int *a其实就可以当做一个数组来用
可是当我们尝试对s进行修改时
s[0]='b';
printf("%c",s[0]);
编译会通过,可是电脑不会输出printf内的字符
实际上
char* s="hello..."
s是一个指针,它指向的地址是一个字符串常量
如果我们遍历这个字符串
for(i=0;i<8;i++){
printf("%c",s[i]);
}
完全没问题
但是我们不能对它进行修改,因为指针所指向的是一个不能修改值的地址
char* s2 = "hello world!"
我们再定义一个指针 s2
如果我们试着输出两个指针的地址
printf("%p\n",s);
printf("%p",s2);
00403024
00403024
地址完全一样
字符串用指针表示还是数组显示?
如果要构造一个字符串-->数组
如果要处理一个字符串-->指针(处理参数,动态分配空间)
我们可以对一个字符串直接的使用printf和scanf
char str[20];
scanf("%s",str);
printf("%s",str);
这个数组有20个 char 大小
可是我们最多只能读取19个字符,最后一位留给计算机补上 '\0'
这样才能保证print正常的输出
char*a[]表示什么?
表示,有一个数组a
a[0]中是一个地址,a[1]中也是一个地址
每一个地址都指向一个 char 的变量,可能是字符,也可能是数字
int main()的参数类型是什么?
实际上
是这样表示的
int main(int argc,char *argv[])
当然在Windows系统中这种写法没什么意义,纯当补充个知识
static int i;//这个东西实在学单片机的时候看到的,就了解了一下
在C语言中,static关键字有三种用途:
1 用于全局变量定义时。
全局变量定义时加上static修饰,表示该变量为静态全局变量。
作用域为当前文件。
2 用于函数定义或声明。
任意函数的定义或声明中包含了static修饰,
表示该函数为静态函数,只能在本文件中被调用。
3 用于局部变量定义。
局部变量定义时,带有static关键字,
表示其为静态局部变量,只被初始化一次,
之后每次调用函数时,该变量值为上次函数退出时的值。
即,改变量的生存周期被扩展到整个程序运行时间段内。
今天单片机的内容是变量进阶与点阵,还有二维数组的使用
变量和数组,在之前C语言的帖子里面都有,点阵的使用和数码管相近,
都是动态显示,用定时器和定时器中断编写的,
但是我们的板子上面没有点阵,所以今天单片机的笔记没有多少
|