学点C语言(20):数据类型

1. 通过 &变量 可以获取变量地址:

#include <stdio.h>

int main(void)
{
  int num = 10;

  printf("变量值: %d\n",num);
  printf("变量址: %d\n",&num);

  getchar();
  return 0;
}

2. 表示变量地址的变量就是指针:

#include <stdio.h>

int main(void)
{
  int num = 10;
  int *p = &num;

  printf("%d,%p\n",num,p);

  getchar();
  return 0;
}

3. *指针 就如同变量本身是一样的:

#include <stdio.h>

int main(void)
{
  int num = 10;
  int *p = &num;

  printf("%d,%p,%d\n",num,p,*p);

  *p = 11;
  printf("%d,%p,%d\n",num,p,*p);

  (*p)++;
  printf("%d,%p,%d\n",num,p,*p);

  num = 99;
  printf("%d,%p,%d\n",num,p,*p);

  getchar();
  return 0;
}

4. 声明指针时要注意初始化,没有初始化的指针是危险的:

#include <stdio.h>

int main(void)
{
  int n1 = 11;
  int n2 = 22;
  int *p = NULL; /* 初始化为空 */

  p = &n1;
  printf("%d,%p,%d\n",n1,p,*p);

  p = &n2;
  printf("%d,%p,%d\n",n2,p,*p);

  getchar();
  return 0;
}

时间: 2024-08-19 23:38:57

学点C语言(20):数据类型的相关文章

学点C语言(29):数据类型

自定义的类型名一般要大写, 以提示这是自命名的类型. 1. 把 unsigned long 更名为 UINT: #include <stdio.h> int main(void) { typedef unsigned long UINT; UINT num = 1234567890; printf("%lu\n", num); getchar(); return 0; } 2. 给一个结构重命名: #include <stdio.h> int main(void

学点C语言(18):数据类型

1. printf 枚举可显示枚举的序号: #include <stdio.h> int main(void) { enum ABC{AAA,BBB,CCC}; enum ABC e1,e2,e3; e1 = AAA; e2 = BBB; e3 = CCC; printf("%d, %d, %d\n", e1, e2, e3); getchar(); return 0; } 2. 定义枚举时可同时定义变量: #include <stdio.h> int main

学点C语言(16):数据类型

曾经对float num=3.14f; 这样的赋值非常疑惑,其实现在也不明白. 既然说明了是float类型,又何必在3.14后面挂个f呢? 书上说: int num=100; 一个整数常量将默认为int类型(除非常数有后缀或超出了int的范围) double num=3.14; 一个浮点数常量将默认为double类型 并要求: long num=100L; long long num=100LL; unsigned long=100UL; unsigned long long num=100UL

学点C语言(14):数据类型

在C语言中, char类型永远都是一个字节, 双字节字符类型是wchar_t; 但它不是内置类型, 定义在 stddef.h. 给 wchar_t 类型的字符或字符数组(也就是字符串)赋值要冠以 L; 格式化输出(如 printf) wchar_t 类型的字符串, 要用 %S(而非 %s) 标识. #include <stdio.h> #include <stddef.h> int main(void) { wchar_t wc=L'A'; wchar_t ws[]=L"

学点C语言(12):数据类型

C语言数据类型: 基本类型.构造类型.指针类型.空类型. 基本类型又包括: 整型.字符.浮点(单精度.双精度).枚举. 构造类型又包括: 数组.结构体.公用体. 1. 显示整型(int)的最小.最大值: #include <stdio.h> #include <limits.h> int main(void) { int n1,n2; n1 = INT_MIN; n2 = INT_MAX; printf("%d .. %d", n1,n2); getchar()

学点C语言(28):数据类型

在结构中, 每个字段的数据类型是唯一的; 使用联合可以在一个字段中储存不同的数据类型. 不同的数据类型共享一块内存. 当然其内存大小应依着大的来. 联合中的数据, 非此即彼, 只有一个有效; 应该有说明在某个数据中此时有用的是什么类型. 除了共享内存以外, 联合与结构一样. 1. union 的大小是其中最大数据成员的大小: #include <stdio.h> int main(void) { union MyUnion { short n1; int n2; double n3; }; p

学点C语言(27):数据类型

所有基础的数据类型, 最大的也不过 10 个字节; 我们可以自定义的数据类型 -- "结构", 通过把若干类型组合在一起, 让一种类型可以大很多. 我们知道, 一个字节有八个 Bit 组成; 能否把一种类型缩小.缩小到 Bit 级? 结构中的 "位字段" 是以 Bit 为单位的, 这已经是计算机的最小单位, 大小是 char 类型的 1/8. 下面的例子中定义的位字段, 分别有 1-4 Bit 大小; 1 Bit 的字段只能放两个数(0.1), 4 Bit 的字段也

学点C语言(23):数据类型

C语言的内存分配很简单: malloc.calloc.realloc.free malloc(字节数); 返回内存段的首地址, void 的. calloc(个数, 类型大小); 和 malloc 的区别就是它会初始化内存为空. realloc(原指针, 字节数); 重新分配由 malloc.calloc 分配的内存; 这里有太多注意事项: 1.如果缩小了, 会截掉一块, 会保留前面的内容; 2.如果扩大了, 仍会保留已有的内容, 但新加的内存不会初始化; 3.在扩大时, 有可能内存地址会变化,

学点C语言(21):数据类型

1. 获取数组的地址无须 &,因为数组名本身就是个地址 #include <stdio.h> int main(void) { char c = 'A'; char cs[] = "ABC"; printf("%c,%s\n",c,cs); /* 获取字符及字符数组的内容 */ printf("%p,%p,%p\n",&c,cs,&cs); /* 获取字符及字符数组的地址,cs与&cs没有区别*/ ge