C 语言教程 在线

1585c-examples-ascii-value-character

本实例通过一些更改可以一次读取长字符,并一个一个显示 ASCII 码。

#include <stdio.h>
#define MAX_STRING_LENGTH 65535 // 最大字符串长度

int main(){
  char s[MAX_STRING_LENGTH];
  printf("请输入长度小于 %d 的任意字符:",MAX_STRING_LENGTH);
  scanf("%s",s);    // 读取字符串。
  for(int i = 0; s[i]; i++){
    printf("%c的ASCII:%d\t",s[i],s[i]);
  }
}

1584c-return-pointer-from-functions

C 不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。

因为局部变量是存储在内存的栈区内,当函数调用结束后,局部变量所占的内存地址便被释放了,因此当其函数执行完毕后,函数内的变量便不再拥有那个内存地址,所以不能返回其指针。

除非将其变量定义为 static 变量,static 变量的值存放在内存中的静态数据区,不会随着函数执行的结束而被清除,故能返回其地址。

1583c-array-of-pointers

指针数组:表示的是一个由指针变量组成的数组,也就是说其中的元素都是指针变量。

数组指针:表示的是这是个指向数组的指针,那么该指针变量存储的地址就必须是数组的首地址,得是个指向行的地址,如 a[2][3] 数组中的 a,a+1 等,不能是具体的指向列的地址,如 &a[0][1], &a[1][1] 这类地址。

1582c-array-of-pointers

指针数组和数组指针的区别

指针数组

指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组。

其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型。

在 32 位系统中,指针占四个字节。

数组指针

数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针。

其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

据上面的解释,可以了解到指针数组和数组指针的区别,因为二者根本就是种类型的变量。

1581c-pointer-to-an-array

关于 double 类型与 float 类型:

printf() 只会看到双精度数,printf %f 格式总是得到 double,所以在 printf() 中使用 %f%lf 的输出显示效果是一样的。但是对于变量来说,double 类型比 float 类型的精度要高。double 精度更高,是指它存储的小数位数更多,但是输出默认都是 6 位小数,如果你想输出更多小数,可以自己控制,比如 %.10lf 就输出 10 位小数。

所以一般情况下 double 类型的占位符可以用 %lf

更多内容可参考:float 与 double 类型区别